如何在datagridview中使用列表和其他数据表填充一列?
How to fill one column using list and other by datatable in datagridview?
我想在日期选择器中更改日期时在 datagridview 中显示两列 'Flowers_Date' 和 'rate'。我正在使用 List 获取 Flowers_Date 的数据,并希望从数据表中获取 'Rate' 的数据。我怎样才能做到这一点?可能吗?谢谢 !
这是我的代码片段。
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
String month = dateTimePicker1.Value.ToString("MM-yyyy");
List<String> dates = new List<string>();
String date1;
cmd.Connection = conn;
conn.Open();
cmd.CommandText = ("SELECT Lilie_Date,Rate FROM lilie_master WHERE Lilie_Date LIKE '%" + month + "%'");
OleDbDataReader rd = cmd.ExecuteReader();
while (rd.Read())
{
date1 = rd["Lilie_Date"].ToString();
if (dates.Contains(date1))
{
continue;
}
else
{
dates.Add(date1);
}
}
conn.Close();
DataTable dt = ListToDataTable(dates);
dataGridView1.DataSource = dt;
dataGridView1.Refresh();
}
private static DataTable ListToDataTable(List<String> list)
{
DataTable table = new DataTable();
// DateTime dtime;
table.Columns.Add("Lilie_Date");
table.Columns.Add("Rate");
table.Columns["Lilie_Date"].ReadOnly = true;
int columns = 0;
foreach (var array in list)
{
if (array.Length > columns)
{
columns = array.Length;
}
}
foreach (var array in list)
{
table.Rows.Add(array);
}
return table;
}
首先,您应该创建一个强类型 class 来存储 Lilie_Date 和 Rate 属性。它使代码更具可读性和简洁性。
public class DateRatePair
{
public String Date { get; set; }
public String Rate { get; set; }
}
那么你的代码应该修改如下(能够获取两个属性):
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
String month = dateTimePicker1.Value.ToString("MM-yyyy");
// List<String> dates = new List<string>();
List<DateRatePair> lstPairs = new List<DateRatePair>();
String date1;
cmd.Connection = conn;
conn.Open();
cmd.CommandText = ("SELECT Lilie_Date,Rate FROM lilie_master WHERE Lilie_Date LIKE '%" + month + "%'");
OleDbDataReader rd = cmd.ExecuteReader();
while (rd.Read())
{
date1 = rd["Lilie_Date"].ToString();
if (dates.Contains(date1))
{
continue;
}
else
{
// dates.Add(date1);
DateRatePair aPair = new DateRatePair();
aPair.Date = date1;
aPair.Rate = rd["Rate"].ToString();
lstPairs.Add(aPair);
}
}
conn.Close();
DataTable dt = ListToDataTable(lstPairs);
dataGridView1.DataSource = dt;
dataGridView1.Refresh();
}
private static DataTable ListToDataTable(List<DateRatePair> list)
{
DataTable table = new DataTable();
// DateTime dtime;
table.Columns.Add("Lilie_Date");
table.Columns.Add("Rate");
table.Columns["Lilie_Date"].ReadOnly = true;
int columns = 0;
foreach (var array in list)
{
if (array.Length > columns)
{
columns = array.Length;
}
}
foreach (var array in list)
{
DataRow dr = table.NewRow();
dr["Lilie_Date"] = array.Date;
dr["Rate"] = array.Rate;
table.Rows.Add(dr);
}
return table;
}
有问题及时回复
我想在日期选择器中更改日期时在 datagridview 中显示两列 'Flowers_Date' 和 'rate'。我正在使用 List 获取 Flowers_Date 的数据,并希望从数据表中获取 'Rate' 的数据。我怎样才能做到这一点?可能吗?谢谢 ! 这是我的代码片段。
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
String month = dateTimePicker1.Value.ToString("MM-yyyy");
List<String> dates = new List<string>();
String date1;
cmd.Connection = conn;
conn.Open();
cmd.CommandText = ("SELECT Lilie_Date,Rate FROM lilie_master WHERE Lilie_Date LIKE '%" + month + "%'");
OleDbDataReader rd = cmd.ExecuteReader();
while (rd.Read())
{
date1 = rd["Lilie_Date"].ToString();
if (dates.Contains(date1))
{
continue;
}
else
{
dates.Add(date1);
}
}
conn.Close();
DataTable dt = ListToDataTable(dates);
dataGridView1.DataSource = dt;
dataGridView1.Refresh();
}
private static DataTable ListToDataTable(List<String> list)
{
DataTable table = new DataTable();
// DateTime dtime;
table.Columns.Add("Lilie_Date");
table.Columns.Add("Rate");
table.Columns["Lilie_Date"].ReadOnly = true;
int columns = 0;
foreach (var array in list)
{
if (array.Length > columns)
{
columns = array.Length;
}
}
foreach (var array in list)
{
table.Rows.Add(array);
}
return table;
}
首先,您应该创建一个强类型 class 来存储 Lilie_Date 和 Rate 属性。它使代码更具可读性和简洁性。
public class DateRatePair
{
public String Date { get; set; }
public String Rate { get; set; }
}
那么你的代码应该修改如下(能够获取两个属性):
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
String month = dateTimePicker1.Value.ToString("MM-yyyy");
// List<String> dates = new List<string>();
List<DateRatePair> lstPairs = new List<DateRatePair>();
String date1;
cmd.Connection = conn;
conn.Open();
cmd.CommandText = ("SELECT Lilie_Date,Rate FROM lilie_master WHERE Lilie_Date LIKE '%" + month + "%'");
OleDbDataReader rd = cmd.ExecuteReader();
while (rd.Read())
{
date1 = rd["Lilie_Date"].ToString();
if (dates.Contains(date1))
{
continue;
}
else
{
// dates.Add(date1);
DateRatePair aPair = new DateRatePair();
aPair.Date = date1;
aPair.Rate = rd["Rate"].ToString();
lstPairs.Add(aPair);
}
}
conn.Close();
DataTable dt = ListToDataTable(lstPairs);
dataGridView1.DataSource = dt;
dataGridView1.Refresh();
}
private static DataTable ListToDataTable(List<DateRatePair> list)
{
DataTable table = new DataTable();
// DateTime dtime;
table.Columns.Add("Lilie_Date");
table.Columns.Add("Rate");
table.Columns["Lilie_Date"].ReadOnly = true;
int columns = 0;
foreach (var array in list)
{
if (array.Length > columns)
{
columns = array.Length;
}
}
foreach (var array in list)
{
DataRow dr = table.NewRow();
dr["Lilie_Date"] = array.Date;
dr["Rate"] = array.Rate;
table.Rows.Add(dr);
}
return table;
}
有问题及时回复