【问题标题】:DataTable to Pre Defined DataGridView ColumnsDataTable 到预定义的 DataGridView 列
【发布时间】:2016-06-11 10:24:05
【问题描述】:

我有一个带有如下预定义列的 DGV,这里是生成方法和绑定方法

fixGridAlarm(dgvAlarmlar);


public void fixGridAlarm(DataGridView gvw)
    {
        gvw.AutoGenerateColumns = false;
        gvw.RowTemplate.Height = 75;
        gvw.ColumnCount = 3;
        gvw.Columns[0].Name = "No";
        gvw.Columns[0].Width = 60;
        gvw.Columns[0].ReadOnly = true;
        gvw.Columns[0].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
        gvw.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
        gvw.Columns[1].Name = "Tarih/Saat";
        gvw.Columns[1].Width = 490;
        gvw.Columns[1].ReadOnly = true;
        gvw.Columns[1].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
        gvw.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
        gvw.Columns[2].Name = "Açıklama";
        gvw.Columns[2].Width = 1195;
        gvw.Columns[2].ReadOnly = true;
        gvw.Columns[2].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
        gvw.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

        BindAlarmlarGrid();

    }


    public void BindAlarmlarGrid()
    {
        string CSVFilePathName = pathAlarms;
        string[] Lines = File.ReadAllLines(CSVFilePathName);
        string[] Fields;
        DataTable dt = new DataTable();
        dt.Columns.Add(dgvAlarmlar.Columns[0].Name, typeof(int));
        dt.Columns.Add(dgvAlarmlar.Columns[1].Name, typeof(DateTime));
        dt.Columns.Add(dgvAlarmlar.Columns[2].Name, typeof(string));
        DataRow Row;
        for (int i = 0; i < Lines.GetLength(0); i++)
        {
            Fields = Lines[i].Split(new char[] { ',' });
            Row = dt.NewRow();
            for (int f = 0; f < 3; f++)
            {
                Row[f] = Fields[f];
            }
            dt.Rows.Add(Row);
        }
        dgvAlarmlar.DataSource = dt;

当我将其 DataSource 作为 DataTable 列添加到原始 DGV 旁边时,我如何将其绑定到原始网格而不是下一个?

【问题讨论】:

  • 你不必在dgvAlarmlar.DataSource = dt;之后打电话给dgvAlarmlar.DataBind();
  • 这是 winform 而不是 asp.net @AlexW
  • 我很难看出问题所在
  • 您将第一列添加 3 次,但每次使用不同的类型。会这样吗?
  • 你试过dt.Rows.Add(Fields);

标签: c# winforms datagridview datatable


【解决方案1】:

数据绑定要求您设置 DataGridViewColumn.DataPropertyName 属性,如 MSDN 文档的备注部分所述:

当 AutoGenerateColumns 属性设置为 true 时,每列会自动将其 DataPropertyName 属性设置为 DataSource 属性指定的数据源中的属性或数据库列的名称。此绑定也可以手动执行,当您只想显示数据源中可用的属性或数据库列的子集时,这很有用。在这种情况下,请将 AutoGenerateColumns 属性设置为 false,然后手动添加每个 DataGridViewColumn,将每个 DataPropertyName 属性的值设置为要显示的数据源中的属性或数据库列。

你可以让你的原始代码像这样工作:

public void fixGridAlarm(DataGridView gvw)
{
    // ...
    for (int i = 0; i < gvw.Columns.Count; i++)
        gvw.Columns[i].DataPropertyName = gvw.Columns[i].Name;
    BindAlarmlarGrid();
}

【讨论】:

    【解决方案2】:

    我通过改变我的绑定方法而不是使用DataTable解决了我的问题

    public void BindAlarmlarGrid()
        {
            string CSVFilePathName = pathAlarms;
            string[] Lines = File.ReadAllLines(CSVFilePathName);
            string[] Fields;
    
            for (int i = 0; i < Lines.GetLength(0); i++)
            {
                Fields = Lines[i].Split(new char[] { ',' });
                dgvAlarmlar.Rows.Add(Fields);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2013-06-20
      • 2011-02-13
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      相关资源
      最近更新 更多