datagrideview下拉列表显示数据

本文介绍了如何在DataGridView中创建下拉列表,并与数据库进行交互。通过建立DataTable映射实际值和显示值,设置DataSource、ValueMember和DisplayMember属性,实现在数据编辑时自动更新数据库。同时,探讨了避免使用隐藏列的方法,简化了数据绑定过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     1.在DataGridView中添加一个隐藏列,用来与数据源字段绑定:隐藏列.DataPropertyName = 数据源.列名;
     2. 用一个DataTable建立实际值和显示值的映射:

     DataTable dtRelation = new DataTable();
    dtRelation.Columns.Add("Code",typeof(byte));
    dtRelation.Columns.Add("DisplayString",typeof(string));
    dtRelation.Rows.Add(new object[] { 0, "苹果" });
    dtRelation.Rows.Add(new object[] { 1, "香蕉" });
    dtRelation.Rows.Add(new object[] { 2, "西瓜" });

    3.设置下拉列表列(DataGridViewComboxColumn)属性:

    下拉列表列.DataSource = dtRelation;
    下拉列表列.ValueMember = "Code";
    下拉列表列.DisplayMember = "DisplayString";    

     4.好了,接下来就是用事件函数实现两列之间的连接:

    private void dgvGroupRule_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
    {
        DataGridViewComboBoxCell selCell = (DataGridViewComboBoxCell)dgvGroupRule.Rows[e.RowIndex].Cells["下拉列表列"];
        selCell.Value= dgvGroupRule.Rows[e.RowIndex].Cells["隐藏列"].Value;
    }

    private void dgvGroupRule_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
         if (dgvGroupRule.Columns[e.ColumnIndex].Name.Equals("下拉列表列"))
        {
            DataGridViewComboBoxCell selCell = (DataGridViewComboBoxCell)dgvGroupRule.Rows[e.RowIndex].Cells["下拉列表列"];
            dgvGroupRule.Rows[e.RowIndex].Cells["隐藏列"].Value = selCell.Value;
        }
    }
     最后隐藏列Value属性的变化影响与DataGridView绑定的数据源,SqlDataAdapter直接根据该数据源进行相应的数据库表操作,不需关心DataGridView的列值。

    一调试果然通过了。但是后来一想又不对,为什么要使用一项隐藏列呢?原来最初查资料的时候看到有人的解决方法只简单的一行“使用隐藏列”,感觉似乎还真需要用隐藏列来跟数据源字段绑定。唉,有了这种想法先入为主,就老是想到用隐藏列。其实不用这么复杂:

    1. 在构造函数里用一个DataTable建立实际值和显示值的映射:

     DataTable dtRelation = new DataTable();
    dtRelation.Columns.Add("Code",typeof(byte));
    dtRelation.Columns.Add("DisplayString",typeof(string));
    dtRelation.Rows.Add(new object[] { 0, "苹果" });
    dtRelation.Rows.Add(new object[] { 1, "香蕉" });
    dtRelation.Rows.Add(new object[] { 2, "西瓜" });

    2.设置下拉列表列(DataGridViewComboxColumn)属性:

    下拉列表列.DataSource = dtRelation;
    下拉列表列.ValueMember = "Code";
    下拉列表列.DisplayMember = "DisplayString";  

    下拉列表列.DataPropertyName = 数据源.列名;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值