因此,对C#来说,我遇到了格式化数据网格列的问题。 所以,我这样填充我的网格:
SQLiteDataAdapter adapter = new SQLiteDataAdapter("select * from table", myDBCon);
DataSet ds = new DataSet();
adapter.Fill(ds);
myDBCon.Close();
dataGridView4.DataSource = ds.Tables[0];
我希望能够自己决定显示列的顺序以及不显示的列。 我尝试使用它的上下文菜单手动向控件添加列,但我最终得到了一个包含我声明的列的网格,然后是所有列,再次显示... 我只希望显示我声明的列,而不是全部,只是ONCE,而不是两次。 我必须在某个地方错过一个简单的设置,否则在设计时添加列将毫无意义
我做错了什么?
答案 0 :(得分:2)
我尝试使用它的上下文手动向控件添加列 菜单,但我最后有一个网格与我声明的列,然后 所有列,再次显示
设置DataGridView.AutoGenerateColumns = false
然后只使用预定义的列
我不确定,但担心此设置无法通过设计师设置。只需将它放在InitializeComponents()
答案 1 :(得分:2)
如果您不想经历在代码或设计器中定义列的所有麻烦,可以通过简单地关闭可见性来删除不需要的列。他们仍然会在那里,但不可见
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;
}
}
答案 2 :(得分:0)
您可以尝试使用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();