Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGridView记录在关闭表单后消失_C#_Winforms_Datagridview - Fatal编程技术网

C# DataGridView记录在关闭表单后消失

C# DataGridView记录在关闭表单后消失,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个datagridview,它没有绑定到数据库中的表。datagridview由下拉列表的内容和单击按钮时的文本框填充。我希望防止每次关闭表单时删除记录。是否有一种方法可以保存datagridview中的记录,而无需创建数据库表 下面是我的代码: private void btnInsert_Click(object sender, EventArgs e) { this.dgInsertedInfo.Rows.Add(ddlVendorID.Text, txtDate.Text)

我有一个datagridview,它没有绑定到数据库中的表。datagridview由下拉列表的内容和单击按钮时的文本框填充。我希望防止每次关闭表单时删除记录。是否有一种方法可以保存datagridview中的记录,而无需创建数据库表

下面是我的代码:

private void btnInsert_Click(object sender, EventArgs e)
{
    this.dgInsertedInfo.Rows.Add(ddlVendorID.Text, txtDate.Text);
}

您可以编写自己的类并将其另存为设置属性

课程设置:

namespace MyNamespace
{
    public class Settings
    {
        private ObservableCollection DataGridItemsProp;
        public ObservableCollection DataGridItems
        {
             get { return DataGridItemsProp; }
             set { DataGridItemsProp = value; }
        }
    }
}
获取并保存您的设置:

//get settings
var datagrid = Properties.Settings.Default.UserSettings;

//save settings
Properties.Settings.Default.UserSettings= datagrid;
Properties.Settings.Default.Save();

你有很多选择。下面是一个使用的简单解决方案

请注意,它做出了一些假设:

  • 数据都是字符串
  • DataGridView已经具有所有列
要保存其他数据类型,您应该创建一个可序列化的结构

private void saveButton_Click(object sender, EventArgs e)
{
    List<List<string>> data = new List<List<string>>();

    foreach(DataGridViewRow row  in dgInsertedInfo.Rows)
    {
       List<string> rowData = new List<string>();
       foreach (DataGridViewCell cell in row.Cells)
           rowData.Add(cell.FormattedValue.ToString());
       data.Add(rowData);
    }

    XmlSerializer xs = new XmlSerializer(data.GetType());
    using (TextWriter tw = new StreamWriter(yourFileName))
    {
        xs.Serialize(tw, data);
        tw.Close();
    }
}

private void loadButton_Click(object sender, EventArgs e)
{
    List<List<string>> data = new List<List<string>>();

    XmlSerializer xs = new XmlSerializer(data.GetType());
    using (TextReader tr = new StreamReader(yourFileName))
         data = (List<List<string>>) xs.Deserialize(tr);

    foreach (List<string> rowData in data)
        dgInsertedInfo.Rows.Add(rowData.ToArray());
}
private void saveButton\u单击(对象发送者,事件参数e)
{
列表数据=新列表();
foreach(dgInsertedInfo.Rows中的DataGridViewRow行)
{
List rowData=新列表();
foreach(row.Cells中的DataGridViewCell单元格)
添加(cell.FormattedValue.ToString());
data.Add(rowData);
}
XmlSerializer xs=新的XmlSerializer(data.GetType());
使用(TextWriter tw=新StreamWriter(您的文件名))
{
序列化(tw,数据);
tw.Close();
}
}
私有无效加载按钮\u单击(对象发送者,事件参数e)
{
列表数据=新列表();
XmlSerializer xs=新的XmlSerializer(data.GetType());
使用(TextReader tr=new StreamReader(yourFileName))
数据=(列表)xs.反序列化(tr);
foreach(列出数据中的行数据)
dInsertedInfo.Rows.Add(rowData.ToArray());
}

您必须以其他方式保存它,如保存在文本文件中。但是如果你有非常大的记录,这是没有效率的。或者您真的需要关闭表单或隐藏它来处理它吗?在数据库中保存它有什么问题?