【问题标题】:How to fill one column using list and other by datatable in datagridview?如何在datagridview中使用列表和其他数据表填充一列?
【发布时间】:2015-07-15 05:49:29
【问题描述】:

当 datepicker 中的日期更改时,我想在 datagridview 中显示两列“Flowers_Date”和“rate”。我正在使用 List 获取 Flowers_Date 的数据,并希望从数据表中获取“Rate”的数据。我怎样才能做到这一点?是否可以?谢谢 ! 这是我的代码的 sn-p。

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;
    }

【问题讨论】:

  • 我可以成功获取日期,但无法获取相同的汇率!

标签: c# datagridview datatable


【解决方案1】:

首先,您应该创建一个强类型类来存储 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;
}

如有任何问题,请及时回复。

【讨论】:

  • 感谢@Hoa 的帮助。尝试您的代码后将更新结果!
  • 谢谢@Hoa。它确实进行了一些小的更改。这真的很有帮助。再次感谢:-)
猜你喜欢
  • 2014-01-27
  • 2014-08-05
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
  • 2020-01-29
相关资源
最近更新 更多