Я задал похожий вопрос здесь , но в моем случае мне нужно хранить несколько наборов данных в течение неизвестного количества раз, а не только один раз.Вот почему я спрашиваю здесь снова.
У меня есть несколько datatables
с 2 столбцами в каждом datatable
.Одним из них является столбец bool
(значения флажков).Значения флажка пусты, когда форма загружается, так что пользователь может проверить или снять их.После обновления флажка пользователь нажимает button1
, чтобы сохранить только значения флажка в dataset
, и этот dataset
будет сохранен в списке.
Эти таблицы данных будут затем очищаться, и те же шаги будут повторяться в течение неизвестного числа раз (форма загружает пустые таблицы данных, флажки обновления пользователя, пользователь нажимает кнопку1).Я использовал метод ниже.Нет ошибок, но когда я хочу отобразить значение списка в datagridview1
в Form2
, оно было пустым.Ниже мой код.Надеюсь получить помощь, спасибо!
Класс 1.cs (где я начал свой список)
public static List<string> list = new List<string>();
Form1.cs
//Create dataset
private DataSet Getdataset()
{
DataSet ds = new DataSet();
DataTable dt1 = new DataTable();
dt1.Columns.Add("Items", typeof(string));
dt1.Columns.Add("Status", typeof(bool));
dt1.Rows.Add("hello");
dt1.Rows.Add("hello");
ds.Tables.Add(dt1);
dgv1.DataSource = dt1;
dgv1.AllowUserToAddRows = false;
DataTable dt2 = new DataTable();
dt2.Columns.Add("Items", typeof(string));
dt2.Columns.Add("Status", typeof(bool));
dt2.Rows.Add("bye");
dt2.Rows.Add("bye");
ds.Tables.Add(dt2);
dgv2.DataSource = dt2;
dgv2.AllowUserToAddRows = false;
return ds;
}
//Save dataset in a List
private void button1_Click(object sender, EventArgs e)
{
DataSet dd = Getdataset();
foreach (DataTable table in dd.Tables)
{
foreach (DataRow row in table.Rows)
{
Class1.list.Add(Convert.ToString(row["Status"]));
}
}
Form2 f = new Form2();
f.ShowDialog();
}
Form2.cs
//Display dataset in datagridview
private void compile_VisibleChanged(object sender, EventArgs e)
{
DataGridViewRow row = (DataGridViewRow)dataGridView1.Rows[0].Clone();
foreach (string item in Class1.list)
{
row.Cells[0].Value = item;
}
dataGridView1.Rows.Add(row);
}
EDIT Согласно комментарию er-sho, я добавил окно сообщения в коде ниже, и онопоказал Systems.Collection.Generic.List1[System.String]
7 раз (у меня 6 флажков).В datagridview1
все еще не было дисплея, и я инициализировал no.столбцов, заголовки для datagridview1
, чтобы избежать ошибки компиляции.Тем не менее, см. Ниже комментарий под решением Гохама (кажется, что данные в Списке не соответствуют ожидаемым)
foreach (string item in Class1.list)
{
MessageBox.Show(Class1.list.ToString());
row.Cells[0].Value = item;
}