C#Winforms DataTable找不到具有指定id的行

时间:2014-10-18 15:16:18

标签: c# .net winforms datatable find

我有一个数据表。我在该数据表中添加了一行。我想将datagridview所选行的值放到数据表所绑定的某个文本框中。在我的datagridview选择更改方法中,我调用了数据表的行集合的find方法。但它给了我NullReferenceException。

        private void dgvRecipeMaterial_SelectionChanged(object sender, EventArgs e)
        {
            if(dgvRecipeMaterial.SelectedRows.Count > 0 && isDgvRecipeMaterialReady)
            {
                int rowIndex = dgvRecipeMaterial.SelectedRows[0].Index;
                int id = Convert.ToInt32(dgvRecipeMaterial.SelectedRows[0].Cells[0].Value);
                object[] data = dtrecetemalzemejoin.Rows[0].ItemArray;
                object[] items = dtrecetemalzemejoin.Rows.Find(id).ItemArray;
                .
                .
                .
                .

我通过调试器查看了我的id。它的值是1166.当我调试时,我看到数据数组中有一个id为1166的项目。但是find方法无法找到id 1166.如果数据表中有多条记录,则没有问题。问题是什么。数据数组有id但find方法无法找到它。

2 个答案:

答案 0 :(得分:0)

DataTable.Rows.Find方法按DataTable.PrimaryKey属性中的列搜索行 检查数据表主键是否包含ID值所在的列 From MSDN: DataTable.PrimaryKey
如果未设置PrimaryKey列。然后在使用Find方法之前,将其设置为:

dtrecetemalzemejoin.PrimaryKey = {dtrecetemalzemejoin.Columns[0]};
//or may be better will be using a name of column
dtrecetemalzemejoin.PrimaryKey = {dtrecetemalzemejoin.Columns["IDColumn"]};

答案 1 :(得分:0)

can you try below code i was also getting same error

 private void dgvRecipeMaterial_SelectionChanged(object sender, EventArgs e)
        {
            if(dgvRecipeMaterial.SelectedRows.Count > 0 && isDgvRecipeMaterialReady)
            {
                int rowIndex = dgvRecipeMaterial.SelectedRows[0].Index;
                string id = Convert.ToString(dgvRecipeMaterial.SelectedRows[0].Cells[0].Value);
                object[] data = dtrecetemalzemejoin.Rows[0].ItemArray;
                object[] items = dtrecetemalzemejoin.Rows.Find(id).ItemArray;
                .
                .