【问题标题】:Bind list to gridview C#将列表绑定到gridview C#
【发布时间】:2013-07-22 10:48:16
【问题描述】:

我正在尝试将列表绑定到gridview。情况是这样的:我从 .txt 文件中获取数据,后来我把它放在第一个列表 List<Mycolumns> 中。我在创建的列表中有数据(有 3 个单独的列)。我正在从名为System_Description 的列之一中获取数据。现在我想在gridview 中显示这些数据,但我得到的只是每行的长度。我应该如何解决它?这是我的代码。

private void button7_Click(object sender, EventArgs e)
    {
        List<MyColumns> list = new List<MyColumns>();

        OpenFileDialog openFile1 = new OpenFileDialog();
        openFile1.Multiselect = true;

        if (openFile1.ShowDialog() != DialogResult.Cancel)
        {
            foreach (string filename in openFile1.FileNames)
            {
                using (StreamReader sr = new StreamReader(filename))
                {
                    string line;
                    while ((line = sr.ReadLine()) != null)
                    {
                        string[] _columns = line.Split(",".ToCharArray());
                        MyColumns mc = new MyColumns();
                        mc.Time = _columns[0];
                        mc.System_Description = _columns[1];
                        mc.User_Description = _columns[2];
                        list.Add(mc);
                    }
                }
            }
            DataTable ListAsDataTable = BuildDataTable<MyColumns>(list);
            DataView ListAsDataView = ListAsDataTable.DefaultView;
            this.dataGridView1.DataSource = view = ListAsDataView;
            this.dataGridView1.AllowUserToAddRows = false;
            dataGridView1.ClearSelection();
        }

        List<string> description = list.Select(x => x.System_Description).ToList<string>();
        this.dataGridView2.DataSource = description;

    }
class MyColumns
{
    public string Time { get; set; }
    public string System_Description { get; set; }
    public string User_Description { get; set; }
}

编辑:

我读到DataBind() 适用于 Web 表单,我的应用程序是桌面应用程序。我现在该怎么办?

【问题讨论】:

  • 您应该做的一件事是将数据绑定到 BindingSource,然后将其分配给 DataSource。

标签: c# winforms visual-studio-2010 list datagridview


【解决方案1】:

我设法解决了这个问题。我是这样做的,也许它会对某人有所帮助。您可以使用DataTable,然后将DT绑定到gridview。

DataTable dt = new DataTable();
dt.Columns.Add("values");

foreach(string items in description)
{
    DataRow row = dt.NewRow();
    dt.Rows.Add(items);
}
this.dataGridView2.DataSource = dt;

【讨论】:

    【解决方案2】:

    this.dataGridView1.DataSource = new BindingSource(list);

    【讨论】:

      【解决方案3】:

      您仅使用以下语句选择 System_Description 字段:

      List<string> description = list.Select(x => x.System_Description).ToList<string>();
      

      然后你将这个列表绑定到gridview:

      this.dataGridView2.DataSource = description;
      

      如果要将整个数据绑定到gridview;只需将列表绑定为数据源即可。

      this.dataGridView2.DataSource = list;
      this.dataGridView2.DataBind();
      

      【讨论】:

      • 是的,我知道这一点,但是当我将我的描述列表绑定到 gridview 时,它会显示内部每行的长度,而不是它保存的数据。这就是问题所在。
      • 在此之后您必须调用 DataBind 方法。 this.dataGridView2.DataBind();
      • @KarthikAMR 你是对的;我假设代码已经有一个绑定语句。
      【解决方案4】:

      使用这个

       this.dataGridView1.DataSource = description;
      

      并在 aspx 上的 gridview 中添加 Bound 字段。

      <asp:BoundField DataField="System_Description" HeaderText="System_Description"></asp:BoundField>
      

      【讨论】:

        猜你喜欢
        • 2019-08-19
        • 1970-01-01
        • 1970-01-01
        • 2014-07-29
        • 1970-01-01
        • 1970-01-01
        • 2013-04-29
        • 1970-01-01
        • 2017-09-02
        相关资源
        最近更新 更多