【问题标题】:c# editing sql table data without loosing the existing [duplicate]c#编辑sql表数据而不丢失现有的[重复]
【发布时间】:2011-08-18 08:24:42
【问题描述】:

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: c# datagridview datatable readonly


    【解决方案1】:

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

    【讨论】:

    • 如何使用 da.Update(dt) “在此计数之后”更新数据库行?有没有办法只“部分”更新?
    • 只需从网格中取出您想要更新到数据库中的行,然后将它们传递给存储的过程,或者如果您通过插入查询来遍历这些行。数据库插入,可以使用SqlConnection 和SqlCommand 类。请谷歌,有很多你会得到的链接。
    【解决方案2】:

    作为替代方案,您可以为用户提供一个新表单,以便他们像许多新表单一样添加新记录。我喜欢用户能够向 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?

    【讨论】:

    • 太棒了,我自己永远也不会发现。 :) 不知何故,这只适用于第一列,第二列不可访问。你能帮忙吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多