关于DataGridView修改后保存的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于DataGridView修改后保存的问题相关的知识,希望对你有一定的参考价值。

设置了一个DataGridView,直接在表上修改,做一个按钮保存修改内容,另外一个按钮用于删除选中行(删除前询问是否确认),求相关代码

参考技术A dgv如果你的表里面有关系就不能直接在表上保存(会报错) 建议你用listview 如果非用这个需要用textbox控件把表里面的信息显示出来在保存

删除前询问是否确认代码
DialogResult result= MessageBox.Show("是否确认删除", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (DialogResult.Yes == result)

//删除代码
追问

如果用listview简单的话,可以写一下代码么,没用过

参考技术B 用DataGridView吧

重新加载后DataGridView保存过滤

【中文标题】重新加载后DataGridView保存过滤【英文标题】:DataGridView save filtering after reload 【发布时间】:2011-03-29 09:30:24 【问题描述】:

我对 C# 中的 DataGridView 有一些问题。

案例是:

我对数据库进行了一些更新,然后用新值重新加载 DataGridView:

myDataGridView.DataSource = myDataSet.Tables[0]

一切正常,但最近有人问我是否有可能在重新加载数据后保持应用相同的列过滤?

做这个过滤案例的方法是什么?

感谢您的任何想法。

【问题讨论】:

【参考方案1】:

好的,我找到了解决方案,也许它会对某人有所帮助: [顺便提一句。我犯了一些语言错误过滤=排序;-)]

   DataGridViewColumn oldColumn = dataGridView1.SortedColumn;

   ListSortDirection direction;
   if (dataGridView1.SortOrder == SortOrder.Ascending) direction = ListSortDirection.Ascending;
   else direction = ListSortDirection.Descending;

   databaseUpdateFunction();

   DataGridViewColumn newColumn = dataGridView1.Columns[oldColumn.Name.ToString()];
   dataGridView1.Sort(newColumn,direction);
   newColumn.HeaderCell.SortGlyphDirection =
                    direction == ListSortDirection.Ascending ?
                    SortOrder.Ascending : SortOrder.Descending;

我使用了来自link text的部分代码

【讨论】:

【参考方案2】:

我采用了 kuba 的解决方案,并将它放在一个实用程序类中,我可以在任何 DataGridView 上使用:

    private static ListSortDirection _oldSortOrder;
    private static DataGridViewColumn _oldSortCol;

    /// <summary>
    /// Saves information about sorting column, to be restored later by calling RestoreSorting
    /// on the same DataGridView
    /// </summary>
    /// <param name="grid"></param>
    public static void SaveSorting(DataGridView grid)
    
        _oldSortOrder = grid.SortOrder == SortOrder.Ascending ?
            ListSortDirection.Ascending : ListSortDirection.Descending;
        _oldSortCol = grid.SortedColumn;
    

    /// <summary>
    /// Restores column sorting to a datagrid. You MUST call this AFTER calling 
    /// SaveSorting on the same DataGridView
    /// </summary>
    /// <param name="grid"></param>
    public static void RestoreSorting(DataGridView grid)
    
        if (_oldSortCol != null)
        
            DataGridViewColumn newCol = grid.Columns[_oldSortCol.Name];
            grid.Sort(newCol, _oldSortOrder);
        
    

使用这个看起来像:

GridUtility.SaveSorting(grid);    
grid.DataSource = databaseFetch(); // or whatever
GridUtility.RestoreSorting(grid);

【讨论】:

【参考方案3】:

在遇到问题之前,我遇到了 Adam Nofsinger 的回答,但我还是使用了它。它工作得很好。

只需将这两行 using 添加到我的类文件中:

using System.ComponentModel; 
using System.Windows.Forms;

谢谢, 吉尔特。

【讨论】:

【参考方案4】:

这对我有用:



    //preserve existing sort column and direction
    ListSortDirection direction;
    DataGridViewColumn oldsort = MyDataGridView.SortedColumn;
    if (MyDataGridView.SortOrder == SortOrder.Ascending)
       direction = ListSortDirection.Ascending;  else  direction = ListSortDirection.Descending; 

    //this is refresh
    MyDataGridView.DataSource = data;

    //reapply sort and direction
    if (oldsort != null)  MyDataGridView.Sort(MyDataGridView.Columns[oldsort.Name], direction); 

【讨论】:

以上是关于关于DataGridView修改后保存的问题的主要内容,如果未能解决你的问题,请参考以下文章

怎么将datagridview中修改后的数据通过按钮点击直接保存到数据库啊?

winform中dataGridView上怎么修改、保存数据啊,急用啊?

C# winform DataGridView控件DataSource 绑定一个表后修改cell值的问题

Datagridview编辑/保存按钮

c# winform DataGridView添加一行,添加数据后,保存到数据库

关于VB.NET中 datagridview 刷新问题