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