c#编辑sql表数据而不会丢失现有的数据

时间:2011-08-18 08:24:43

标签: c# datagridview datatable readonly

  

可能重复:
  C# WinForms BindingList & DataGridView - disallowing EDIT prevents creation of a NEW row? How can I address this?

我有一个sql数据表,我不希望用户删除或修改任何内容,他们只能在需要时添加新行。

我的解决方案是使用datagridview来显示现有数据,但我被卡住了,因为我无法拒绝编辑或删除而不拒绝添加新行,所以这不是一个好方法。否则,使用更新方法将覆盖用户已更改的所有数据(稍后我可以为此提供覆盖权限。)

我可以制作一个只读dgw来显示现有数据,并允许用户逐个输入带有文本框的新数据,但这是一个更大的工作,也许是不必要的。

是否有一种简单的方法可以在不编辑现有数据的情况下添加新行?也许操纵数据表?

谢谢。

2 个答案:

答案 0 :(得分:0)

我能想到的更简单的方法是,在填充网格时,看到我从DB添加了多少现有行。我会继续指望它。然后,当用户单击“保存”时,在此计数之后,从行中更新数据库。更新数据库后,将计数更新为新行计数。 即使您不想让用户编辑,也可以这样做,您可以编写事件来检查可编辑行是否小于tis计数,然后禁止他编辑。

答案 1 :(得分:0)

作为替代方案,您可以为用户提供一个新表单,以便他们像许多新表单一样添加新记录。我喜欢用户能够向DataGridView添加行但最终放弃与之战斗的想法。你只需要更容易控制一个表格,而不是DGV中的一行。

回答你的问题 - 可能要求DataGridView主持会议,而不是争取消息来源:

dataGridView1.DataSource = bs;
dataGridView1.ReadOnly = true;
dataGridView1.CurrentCellChanged += delegate 
{
    DataGridViewRow row = dataGridView1.CurrentRow;
    bool readOnly = row == null ||
        row.Index != dataGridView1.NewRowIndex;
    dataGridView1.ReadOnly = readOnly;
};

(并且不要在列表中设置AllowEdit)

来源:C# WinForms BindingList & DataGridView - disallowing EDIT prevents creation of a NEW row? How can I address this?