C# 保存表单的元素

C# 保存表单的元素,c#,winforms,save,C#,Winforms,Save,我已经做了一个程序,你有一个DataGridView和2列。第一列是只读文本框(用户无法更改)。第二列的每一行都有相同的组合框 如果用户更改组合框,然后关闭程序,我希望保存元素,以便下次打开程序时,组合框将被选中 我已经成功地将第一列和第二列的元素保存在两个文本文件中,example1.txt和example2.txt,但我不知道如何在程序打开时将保存的元素再次放置在datagridview中 此外,txt文件保存在csv文件所在的路径中。我希望它保存在exe路径 以下是我迄今为止所做的:

我已经做了一个程序,你有一个DataGridView和2列。第一列是只读文本框(用户无法更改)。第二列的每一行都有相同的组合框

如果用户更改组合框,然后关闭程序,我希望保存元素,以便下次打开程序时,组合框将被选中

我已经成功地将第一列和第二列的元素保存在两个文本文件中,example1.txt和example2.txt,但我不知道如何在程序打开时将保存的元素再次放置在datagridview中

此外,txt文件保存在csv文件所在的路径中。我希望它保存在exe路径

以下是我迄今为止所做的:

private void button1_Click(object sender, EventArgs e)
            {
                string filename = "";
                DialogResult result = openFileDialog1.ShowDialog();
                if (result == DialogResult.OK)
                {
                    filename = openFileDialog1.FileName;
                textBox1.Text = filename;
                string line;
            // Read the file and display it line by line.
             System.IO.StreamReader file = new System.IO.StreamReader(textBox1.Text);

            stringforData = file.ReadLine();      
            while ((line = file.ReadLine()) != null)
            {

                fileList.Add(line.Split(';'));
            }

            file.Close();



            this.ToDataGrid();
        }
    }

private void button2_Click(object sender, EventArgs e)
        {

    //*************  COLUMN 2 TO STRING[]  ************************************
            string[] colB = new string[dataGridView1.Rows.Count];



            for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {

                    colB[i] = Convert.ToString(dataGridView1.Rows[i].Cells[1].Value);
                   File.WriteAllLines("settings2.txt", colB);
                }
        //*************************************************************************
}
     public void ToDataGrid()
        {
            string[] split = stringforData.Split(';');


        foreach (string item in split)
        {
            dataGridView1.Rows.Add(item);
        }
        File.WriteAllLines("settings1.txt", split);
}
private void按钮1\u单击(对象发送者,事件参数e)
{
字符串filename=“”;
DialogResult=openFileDialog1.ShowDialog();
if(result==DialogResult.OK)
{
filename=openFileDialog1.filename;
textBox1.Text=文件名;
弦线;
//读取文件并逐行显示。
System.IO.StreamReader file=新的System.IO.StreamReader(textBox1.Text);
stringforData=file.ReadLine();
而((line=file.ReadLine())!=null)
{
添加(line.Split(“;”);
}
file.Close();
这是.ToDataGrid();
}
}
私有无效按钮2\u单击(对象发送者,事件参数e)
{
//*************第2列到字符串[]************************************
string[]colB=新字符串[dataGridView1.Rows.Count];
对于(int i=0;i
谢谢,

George

您可以利用DataSet对象的一些内置功能,将网格数据保存到XML文件中,并在再次启动应用程序时将其读回网格

        //note that this will just save it in the bin folder
        //you'll want to use a better path
        string settingsFile = "GridSettings.xml";
        DataTable gridData = null;

        public FormSaveFoo()
        {
            InitializeComponent();
            PrepareSettingsDataSource();
            SetUpDataSourceBindings();

        }

        private void PrepareSettingsDataSource()
        {
            //see if have a settings file
            if (File.Exists(settingsFile))
            {
                //load up the settings 
                DataSet settings = new DataSet();
                settings.ReadXml(settingsFile);
                if (settings.Tables.Count > 0)
                {
                    gridData = settings.Tables[0];
                }
            }
            else
            {
                CreateSettingsTable();
            }
        }

        private void CreateSettingsTable()
        {
            gridData = new DataTable();
            gridData.Columns.Add(new DataColumn("Name"));
            gridData.Columns.Add(new DataColumn("Text"));
        }

        private void SetUpDataSourceBindings()
        {

            dataGridView1.Columns["NameColumn1"].DataPropertyName = "Name";
            dataGridView1.Columns["TextColumn1"].DataPropertyName = "Text";
            dataGridView1.DataSource = gridData;
        }


        private void button1_Click(object sender, EventArgs e)
        {
            //add the grid data to a dataset and then write it to a file
            DataSet persistSettings = new DataSet();
            persistSettings.Tables.Add(gridData);
            persistSettings.WriteXml(settingsFile);
        }

无法理解dataGridView1.Columns[“NameColumn1”]的作用。DataPropertyName=“Name”
dataGridView1.Columns[“TextColumn1”].DataPropertyName=“Text”
gridData=settings.Tables[0]行做。。。。。请帮忙!dataGridView1.Columns[“NameColumn1”]。DataPropertyName=“Name”;告诉网格列要链接到哪个datatable列。gridData=settings.Tables[0];从从XML读取的数据集中获取第一个表,并将其分配给绑定到网格的数据表。i获取错误“对象引用未设置为对象的实例”。您需要将对象名称更改为代码中使用的名称。无论您如何命名列,也可以使用列索引dataGridView1.columns[1] .DataPropertyName=“文本”