C#初学者关于dataGrid列的问题

本文关键字:问题 dataGrid 初学者 | 更新日期: 2023-09-27 18:28:32

因此,作为C#的新手,我遇到了格式化数据网格列的问题。所以,我这样填充我的网格:

SQLiteDataAdapter adapter = new SQLiteDataAdapter("select * from table", myDBCon);
DataSet ds = new DataSet();
adapter.Fill(ds);
myDBCon.Close();
dataGridView4.DataSource = ds.Tables[0];

我希望能够自己决定显示列的顺序和不显示的列。我尝试使用控件的上下文菜单手动将列添加到控件中,但最终我得到了一个网格,其中包含我声明的列,然后是所有列,再次显示。。。我只想显示我声明的列,而不是全部,只显示一次,而不是两次。我一定在某个地方错过了一个简单的设置,否则在设计时添加列将是毫无意义的

我做错了什么?

C#初学者关于dataGrid列的问题

我尝试使用控件的上下文手动向控件添加列菜单,但我最终得到了一个包含我声明的列的网格按所有列,再次显示

设置DataGridView.AutoGenerateColumns = false
然后只使用预定义的列

我不确定,但恐怕这个设置不能通过设计器设置。只需将其放在InitializeComponents() 之后的Form的构造函数中

如果你不想在代码或设计器中定义列,你可以通过关闭可见性来删除不需要的列。它们仍然在那里,但看不到

dataGridView4.Columns["some_column_name"].Visible = false;

如果有多个地方可以将数据表分配给网格,则可以使用DataSourceChanged事件:

public Form1()
{
    InitializeComponent();
    dataGridView4.DataSourceChanged += dataGridView4_DataSourceChanged;
}
void dataGridView4_DataSourceChanged(object sender, EventArgs e)
{
    DataGridView datagrid = sender as DataGridView;
    if (datagrid != null)
    {
       datagrid.Columns["some_column_name"].Visible = false;
    }
}

您可以尝试使用LINQ来过滤数据(通过在代码顶部添加using System.Linq;):

dataGridView4.DataSource = ds.Tables[0].AsEnumerable()
                             .Select(row => new 
                                            {
                                                Id = row.Field<int>("Id"),
                                                Column2 = row.Field<string>("Column2"),
                                                Col3 = ... // Put here the columns you want
                                            })
                             .CopyToDataTable();