Dev的GridControl控件选择框的使用

Dev的GridControl控件选择框的使用

先介绍环境:VS2010,dev11.2

想要达到的效果:,当单击某一行时前面的选择框选中。

在网上找了不少,但是感觉跟我想的做法很不一样(有很多都是再另外添加一个什么CheckBox,这个我在Dev里是没有找到)

下面介绍我的做法:

首先:GridControl控件要设置为不可编辑状态,在“OptionsBehavior”下将“Editable”的值改为false,否则左键单击不管用。

第一步:

进入“Run Designer”添加三列,主要讲述一下第一列“判断列”的属性设置,这用了Dev的自带属性,在添加该列时将其属性[ColumnEdit]从下拉框中选择“CheckEdit”,然后打开该属性的下来箭头,设置其“ValueChecked”和“ValueUnChecked”的类型及值,这里我用了int类型的1和0来作为状态的指示。【注:最好还是不要用默认的Bool型的true和false,这样容易出现总是无法显示打钩选中的情况,但是用int型的就不会出现此情况;我找到问题所在了:因为我用了ToString函数,这时会自动把true或者false改变为大写的“True”或“False”,因此判断时就不正确,修改了这一点就可以正确大道目的】

另:我的做法主要就是这一步跟网上说的不太一样,不是添加了一个CheckBox而是用Dev自己的已有的属性。

第二步:

添加事件,选中GridControl的GridView,然后添加其事件“RowClick”,添加事件代码如下:

复制代码

private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
        {
            string midValueStr = gridView1.GetDataRow(e.RowHandle)["select"].ToString();
            if (midValueStr == "0" || midValueStr == "")
            {
                gridView1.GetDataRow(e.RowHandle)["select"] = 1;
            }
            else
            {
                gridView1.GetDataRow(e.RowHandle)["select"] = 0;
            }
        }

复制代码

注:if条件中的空值判断,我的这一列是在数据库取出数据后新添加的,所以其值取出来是空的,而不是0.因此,该行未选中时可能有两种值即0和空。

第三步:

运行,即可实现上述效果。而且在这种情况下,GridControl绑定的数据源中,我们所添加的判断列的值也是实时改变的,这也方便后续取值使用。

小结:

①网上很多方法都添加了很多东西,最典型比如添加了CheckBox然后更改属性,同时又用了不止一个事件,不知道是我没看懂还是我没有完全理解那些人的方式,反正我觉得太复杂了,而且有的控件或者属性、事件我都找不到。不知道为什么不用dev本身的东西。

②再说一下我在试验过程中测试的几个相似的事件:FocusedRowChanged事件,它是在选中行的位置改变时发生(比如拖动选中行),而不是说你选中了另一行时发生;事件FocusedRowObjectChanged代表的才是在选中行改变时触发,但是这个事件在控件最初载入时也会触发,因此我感觉很不方便;CellValueChanged事件也可以实现上面的效果,此时整个控件是可编辑状态,但是需要根据不同列的需求来设置具体列的可编辑状态;最后就是RowClick事件了,也是我们上面使用的,它的效果就是只有你单击了那一行才会触发事件。

实现在购物车每项添加一个复选,页面下方添加文本控件用于显示总价,可以按照以下步骤进行: 1. 修改购物车列表项布局,在左侧添加一个CheckBox复选,用于标记该项是否被选中。 2. 在购物车页面使用RecyclerView展示购物车列表,设置LayoutManager和Adapter。 3. 在Activity或Fragment,获取RecyclerView和用于显示总价的TextView控件。 4. 在Adapter,实现CheckBox的点击事件,当CheckBox选中或取消选中,更新当前选中的商品列表和总价数据,并调用RecyclerView的notifyDataSetChanged()方法刷新列表。 5. 在Activity或Fragment,添加一个方法用于计算当前选中的商品列表的总价,并将结果显示在TextView控件。 6. 在Activity或Fragment,调用RecyclerView的addOnScrollListener()方法,监听列表滚动事件,当列表滚动,隐藏或显示底部的TextView控件。 以下是示例代码: 购物车列表项布局: ``` <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <CheckBox android:id="@+id/checkbox_item" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <ImageView android:id="@+id/image_item" android:layout_width="60dp" android:layout_height="60dp"/> <TextView android:id="@+id/name_item" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <TextView android:id="@+id/price_item" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:id="@+id/delete_item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="删除"/> </LinearLayout> ``` 购物车页面代码: ``` public class CartActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private TextView mTotalPrice; private List<CartItem> mCartItems; private CartAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cart); mRecyclerView = findViewById(R.id.recyclerview_cart); mTotalPrice = findViewById(R.id.text_total_price); // 初始化购物车列表和适配器 mCartItems = getCartItems(); mAdapter = new CartAdapter(mCartItems); mAdapter.setOnCheckedChangeListener(new CartAdapter.OnCheckedChangeListener() { @Override public void onCheckedChanged() { updateTotalPrice(); } }); mRecyclerView.setAdapter(mAdapter); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); // 计算总价并显示 updateTotalPrice(); // 监听列表滚动事件,隐藏或显示总价 mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { if (dy > 0) { mTotalPrice.setVisibility(View.GONE); } else { mTotalPrice.setVisibility(View.VISIBLE); } } }); } // 获取购物车列表数据 private List<CartItem> getCartItems() { // TODO: 从SharedPreferences或SQLite读取购物车数据 return cartItems; } // 更新购物车数据 private void updateCartItems(List<CartItem> cartItems) { // TODO: 将购物车数据保存到SharedPreferences或SQLite mAdapter.setCartItems(cartItems); mAdapter.notifyDataSetChanged(); } // 计算当前选中的商品列表的总价,并将结果显示在TextView控件 private void updateTotalPrice() { List<CartItem> checkedItems = mAdapter.getCheckedItems(); float totalPrice = 0; for (CartItem item : checkedItems) { totalPrice += item.getPrice() * item.getQuantity(); } mTotalPrice.setText(String.format("总价:%.2f元", totalPrice)); } } ``` 购物车适配器代码: ``` public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder> { private List<CartItem> mCartItems; private OnCheckedChangeListener mOnCheckedChangeListener; public CartAdapter(List<CartItem> cartItems) { mCartItems = cartItems; } public void setOnCheckedChangeListener(OnCheckedChangeListener listener) { mOnCheckedChangeListener = listener; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_cart, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { CartItem item = mCartItems.get(position); holder.mCheckBox.setChecked(item.isChecked()); holder.mName.setText(item.getName()); holder.mPrice.setText(String.format("%.2f元", item.getPrice())); holder.mQuantity.setText(String.valueOf(item.getQuantity())); holder.mSubtotal.setText(String.format("%.2f元", item.getPrice() * item.getQuantity())); holder.mDelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mCartItems.remove(position); notifyItemRemoved(position); notifyItemRangeChanged(position, getItemCount() - position); } }); holder.mCheckBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { item.setChecked(holder.mCheckBox.isChecked()); if (mOnCheckedChangeListener != null) { mOnCheckedChangeListener.onCheckedChanged(); } } }); } @Override public int getItemCount() { return mCartItems.size(); } public void setCartItems(List<CartItem> cartItems) { mCartItems = cartItems; } public List<CartItem> getCheckedItems() { List<CartItem> checkedItems = new ArrayList<>(); for (CartItem item : mCartItems) { if (item.isChecked()) { checkedItems.add(item); } } return checkedItems; } public interface OnCheckedChangeListener { void onCheckedChanged(); } static class ViewHolder extends RecyclerView.ViewHolder { CheckBox mCheckBox; ImageView mImage; TextView mName; TextView mPrice; Button mMinus; TextView mQuantity; Button mPlus; TextView mSubtotal; Button mDelete; public ViewHolder(@NonNull View itemView) { super(itemView); mCheckBox = itemView.findViewById(R.id.checkbox_item); mImage = itemView.findViewById(R.id.image_item); mName = itemView.findViewById(R.id.name_item); mPrice = itemView.findViewById(R.id.price_item); mMinus = itemView.findViewById(R.id.minus_item); mQuantity = itemView.findViewById(R.id.quantity_item); mPlus = itemView.findViewById(R.id.plus_item); mSubtotal = itemView.findViewById(R.id.subtotal_item); mDelete = itemView.findViewById(R.id.delete_item); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值