代码之家  ›  专栏  ›  技术社区  ›  Jack

如何在由数据库填充的DataGridView中使用自己的头名称?

  •  0
  • Jack  · 技术社区  · 7 年前

    我试图在DataGridView中使用我自己的标题文本,它是从数据库自动填充的。我试过了 dataGridView1.AutoGenerateColumns = false

        void createSearchResultHeader()
        {
            foreach(var prop in typeof(DB.Message).GetProperties())
            {
                var display =
                   typeof(DB.Message)
                   .GetProperty(prop.Name)
                   .GetCustomAttributes(typeof(System.ComponentModel.DisplayNameAttribute), inherit: false)
                   .FirstOrDefault() as System.ComponentModel.DisplayNameAttribute;
                DataGridViewColumn col = new DataGridViewTextBoxColumn();
                col.HeaderText = display.DisplayName;
                dataGridView1.Columns.Add(col);
            }
        }
    

    然后加载结果:

                using (var conn = createConnection())
                using (var da = new SQLiteDataAdapter(createCommand(conn)))
                using (var dt = new DataSet())
                {
                    dt.Locale = System.Globalization.CultureInfo.InvariantCulture;
                    da.Fill(dt);
                    dg.DataSource = dt.Tables[0].DefaultView;
                }
    

    问题是 dataGridView1.AutoGenerateColumns=假 列被创建(我调用 createSearchResultHeader() dataGridView1.AutoGenerateColumns = true 来自数据库的结果已成功加载,但它添加了自己的列,而不是使用 createSearchResultHeader() . 我该怎么修?

    1 回复  |  直到 7 年前
        1
  •  1
  •   C-Pound Guru    7 年前

    你必须设置 DataGridViewColumn.DataPropertyName

    void createSearchResultHeader()
    {
        foreach(var prop in typeof(DB.Message).GetProperties())
        {
            var display =
               typeof(DB.Message)
               .GetProperty(prop.Name)
               .GetCustomAttributes(typeof(System.ComponentModel.DisplayNameAttribute), inherit: false)
               .FirstOrDefault() as System.ComponentModel.DisplayNameAttribute;
            DataGridViewColumn col = new DataGridViewTextBoxColumn();
            col.HeaderText = display.DisplayName;
            col.DataPropertyName = prop.Name; // Add this
            dataGridView1.Columns.Add(col);
        }
    }