我有一个数据表。我在该数据表中添加了一行。我想将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方法无法找到它。
答案 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;
.
.