如何在C#中设置和获取Data Bind Gridview组合框列的值

时间:2016-12-01 04:48:37

标签: c#

我有一个带有组合框列的数据网格视图,我已将该列绑定到datatable,如下所示:

 ((grdItems.Columns[1]) as DataGridViewComboBoxColumn).DataSource = dt;
 ((grdItems.Columns[1]) as DataGridViewComboBoxColumn).DisplayMember = "LocationName";
 ((grdItems.Columns[1]) as DataGridViewComboBoxColumn).ValueMember = "Id";

现在我可以得到这样的选定值:

var value = grdItems.Rows[0][1].Value;

但问题是,当我手动添加gridview中的行(没有绑定网格)时,我无法获得组合框单元格的值。 我正在添加这样的行:

grdItems.Rows.Add(1, 1, "Some Value");

我用的时候 var value = grdItems.Rows [0] [1] .Value; 获取该值的方法,i返回单元格的文本而不是值,即 1 在这种情况下。

我该如何解决这个问题?因为我想要手动添加行的单元格的值,以及数据绑定行。

1 个答案:

答案 0 :(得分:0)

我假设通过手动添加您的意思来自UI,所以获取新添加的行的值的一种方法是使用event handler来添加行时引发的events 。您可以使用以下之一 1)RowsAdded https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.rowsadded(v=vs.110).aspx 2)RowPrePaint - https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.rowprepaint(v=vs.110).aspx - 没有使用这么多,但也是一个选项

this.myGridView.RowsAdded += new DataGridViewRowsAddedEventHandler(myGridView_RowsAdded);

 private void myGridView_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    var newRow = this.myGridView.Rows[e.RowIndex];
}

编辑:根据评论中陈述的实际要求 - 实际要求是检索新添加的行的单元格值(Id),对应于按钮保存点击事件的combox box列

假设您已将组合框绑定到数据源本身,即

 combobox.DataSource=someList

所以你能做的就是写一个linq查询

 someList.Where( v=>v.Text.Equals("row.Cells[1].Value")).FirstOrDefault().Id