0

我刚开始用 C# 编写一个客户应用程序,大部分都使用 Visual Studio 设计模式。请记住,我昨天才开始学习 C# - 所以如果我犯了任何愚蠢的错误,请说出来。

到目前为止我所拥有的

  • 一个数据库;
  • 链接到客户和代理表的数据集;
  • 绑定到 DataSet 的 BindingSource;
  • 绑定到 BindingSource 的 Customer 表的 CustomerBindingSource;
  • 绑定到 BindingSource 的 Agent 表的 AgentBindingSource;
  • 绑定到 CustomerBindingSource 的 DataGridView,其中 AgentID 列是绑定到 AgentBindingSource 的组合框。

到目前为止,这工作正常。但是我有几个问题,其中一个是在下面的代码中......

编码

void grdCustomers_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    DataGridViewRow gvr = grdCustomers.Rows[e.RowIndex];
    String currID = gvr.Cells[0].Value.ToString();
    if (currID.Equals(""))
    {
        gvr.Cells[0].Value = "{id}";
    }
}
void button1_Click(object sender, EventArgs e) //Save button for when the user has finished editing.
{
    foreach (DataGridViewRow gvr in grdCustomers.Rows)
    {
        String currID = gvr.Cells[0].Value.ToString();
        if (currID.Equals("{id}"))
        {
            String g = Guid.NewGuid().ToString();
            gvr.Cells[0].Value = g;
        }
    }
    customerTableAdapter.Update(customerAppDS21.Customer);
}

问题

  1. 尝试运行程序时,第 4 行导致问题。这是说对象引用未设置为对象的实例。我认为这是由 引起的gvr.Cells[0],但我不知道为什么。在我看来,如果在行的设置完成(包括添加所有单元格)时调用它是有意义的。

  2. 我无法让 DataGridView 将数据绑定到数据库。我希望用户能够编辑任何值,但是当他们添加一行时,直到他们单击“保存”按钮 ( button1) 才会计算 id。

如果有人可以帮助我解决这些问题中的任何一个,我将不胜感激。

问候,

理查德

4

3 回答 3

1

它是“值”,它是空的。单元格的默认值始终为空。这意味着您可能会在它被填充之前阅读它,或者该列没有任何价值。在尝试访问它之前检查它是否为空。如果为 null,则该单元格没有值。

于 2010-10-28T13:53:11.733 回答
0

根据我的经验,在 cellFormatted 事件处理程序中修改单元格的内容更容易。

于 2010-10-28T14:01:33.737 回答
0

似乎您添加了一个具有空值的新行,然后将数据分配给它。尝试更改将行添加到网格的方式

于 2014-11-17T16:09:17.437 回答