向数据表添加新行时,表没有主键

时间:2012-07-09 14:29:17

标签: c# winforms datatable

我在Windows窗体中有一个数据表,我想在表中添加一个新行。我总是收到错误

  

表没有主键。

问题是我根本不需要主键。它可能在表格中有重复的“ID”。 我的代码:

using (DataTable dt = new DataTable())
{
dt.Columns.Add("EntryDE", typeof(string));
dt.Columns.Add("Descr", typeof(string));
dt.Columns.Add("Id", typeof(int));
foreach (DataGridViewRow row in dgv.Rows)
{
    DataGridViewCheckBoxCell check = row.Cells[0] as DataGridViewCheckBoxCell;
    if (check.Value != null)
    {
        if ((bool)check.Value)
        {
            //this row has a checkBox set to true (tick is added)
            //add this row to dataTable ...
            DataRow myRow = (row.DataBoundItem as DataRowView).Row;
            DataRow dr = dt.NewRow();

            dr["EntryDE"] = myRow["ID"].ToString();        
            dr["Descr"] = myRow["EntryName"];               
            dr["Id"] = Id;    
                    dt.Rows.Add(dr);
        }
    }
}

感谢您的建议。

2 个答案:

答案 0 :(得分:0)

您可能确实需要主键,因为没有主键,您将无法在以后更新或删除行。

如果ID字段包含重复项,则应添加另一列,将其命名为primary_key或任何您喜欢的列,并将该列用作PK。

答案 1 :(得分:0)

错误不是来自DataTable,因为它可以工作:

    using (DataTable dt = new DataTable())
    {
        dt.Columns.Add("EntryDE", typeof(string));
        dt.Columns.Add("Descr", typeof(string));
        dt.Columns.Add("Id", typeof(int));

        for (int i = 0; i < 10; i++) 
        {
            DataRow dr = dt.NewRow();

            dr["EntryDE"] = "abc";
            dr["Descr"] = "xyz";
            dr["Id"] = 1;
            dt.Rows.Add(dr);
        }
    }

你还有其他问题。