【问题标题】:DataGridView Edit ModeDataGridView 编辑模式
【发布时间】:2011-01-20 14:10:40
【问题描述】:

目前我有一个 .NET DataGridView 显示来自我的源 DataTable dt 的数据。我希望能够对其进行编辑,以便当用户单击单元格并进行更改时,更改最终将被存储回DataTable 源中。到目前为止,我已经尝试过:

dataGridView1.DataSource = dt;
dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;

但这不允许我编辑表格中的任何内容。有什么建议吗?

感谢您的帮助。

【问题讨论】:

    标签: .net datagridview


    【解决方案1】:

    我在一个项目中对此进行了尝试,以下效果就像一个魅力:

    public Form1()
    {
        InitializeComponent();
    
        var dt = new DataTable();
        dt.Columns.Add("Int", typeof(int));
        dt.Columns.Add("Double", typeof(double));
    
        var random = new Random();
    
        for(var i = 0; i < 50; i++)
        {
            dt.Rows.Add(random.Next(), random.NextDouble());
        }
    
        dataGridView1.DataSource = dt;
        dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;
    }
    

    DGV 没有什么特别之处。我只是将它从工具箱中放到表单上。我没有预先创建 DGV 列。

    对于您的情况,我可以建议的最佳方法是尝试在您的主要解决方案之外重现该问题。尝试在其他地方复制你正在做的事情,希望你能找到让你绊倒的一件事。如果您确实在数据绑定之前创建了自己的 DGV 列,请确保它们也没有设置为 ReadOnly。

    【讨论】:

    • 所以我试过了,它确实有效,允许编辑。但是,我加载我的 DataTable 有点不同。我首先解析一个 CSV 文件,然后使用 dt.load() 方法将其全部放入其中。这是我的代码:使用 (CachedCsvReader csv = new CachedCsvReader(new StreamReader(FrontierDump), true, '\t')) { dt.Load(csv); } dt.TableName = "Frontier_DataTable";数据视图 dv = 新数据视图(dt); dv.Sort = "订单号"; dt = dv.ToTable();我猜这与正在加载的列是只读的有关。
    【解决方案2】:

    您希望它保存到 DataTable(在运行应用程序的机器上的内存中)还是服务器?

    如果您的意思是 DataTable,并且 DataGridView 绑定到表,它会自动发生,您只是看不到它。您可以通过在 DataGridView 的 RowLeave 事件中对数据表调用 GetChanges() 来查看这一点。

    但是,我猜您是真的想将它保存回源数据库。如果我猜对了,请看这篇文章:http://social.msdn.microsoft.com/Forums/en/vbide/thread/5f8741dc-5874-46e7-8665-6bda3674bafd

    编辑 - 基于 cmets 添加

    有一些事情需要检查和尝试。

    首先,为了好玩,将 EditMode 设置为 EditOnKeystroke,而不是 EditOnEnter。

    还要检查以确保 .Enabled 属性设置为 true,并且它不在另一个将 .Enabled 设置为 false 的控件(例如 Panel)中。

    另外,确保 ReadOnly 属性设置为 false 。

    此外,CanFocus 需要设置为 true。

    我列出的大部分内容都是默认设置,因此请在“属性”窗格中查找以粗体显示的设置,这表明它们不是默认属性值。

    【讨论】:

    • 截至目前,我无法通过 DataGridView 简单地编辑表格。上面的代码似乎不起作用。你对此有什么想法吗?
    • 我想我肯定误解了这个问题。你是说物理上的,当你点击一个单元格或标签时,它不想让你输入,你必须暂停然后再次点击?您希望能够只输入吗?
    • 能不能编辑GridView的内容,但是改变不影响DataTable,还是不能编辑窗体上的控件内容的问题,比如被禁用什么的?
    • 好像编辑被禁用了。当我实际单击单元格时,它不允许我更改任何内容。我假设一旦我编辑了它,我就可以在 DataTable 中调用 AcceptChanges 方法,并且更改将反映在那里。我找到了这个资源:msdn.microsoft.com/en-us/library/yztkd864.aspx,它指定底层数据源必须支持编辑。这是我的下一个猜测,但我不知道如何通过另一个来源使 DataTable 可编辑。感谢您的帮助:-)
    • DataTable 支持编辑。它不适用于您的情况。
    【解决方案3】:

    如果您使用设计器,则在配置列时会出现三个复选框。 允许添加 允许编辑 允许删除 我认为您没有检查任何一个,因此网格对您显示为只读。

    还要检查您是否已将列标记为只读。

    【讨论】:

      猜你喜欢
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多