C#初学者q关于dataGrid列

C#初学者q关于dataGrid列,c#,winforms,datagrid,C#,Winforms,Datagrid,因此,作为C#的新手,我遇到了格式化数据网格列的问题。 所以,我像这样填充我的网格: SQLiteDataAdapter adapter = new SQLiteDataAdapter("select * from table", myDBCon); DataSet ds = new DataSet(); adapter.Fill(ds); myDBCon.Close(); dataGridView4.DataSource = ds.Tables[0]; 我希望自己能够决定显示列的顺序,以及不

因此,作为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
然后只使用预定义的列

我不确定,但恐怕无法通过designer设置此设置。只需在
InitializeComponents()之后将其放入表单的构造函数中

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

设置DataGridView.AutoGenerateColumns=false

然后只使用预定义的列


我不确定,但恐怕无法通过designer设置此设置。只需在
InitializeComponents()之后将其放入表单的构造函数中

如果您不想经历在代码或设计器中定义列的所有麻烦,只需关闭可见性即可删除不需要的列。它们仍然在那里,但看不见

dataGridView4.Columns["some_column_name"].Visible = false;
如果在多个位置将datatable分配给网格,则可以使用DataSourceChanged事件:


如果不想经历在代码或设计器中定义列的所有麻烦,只需关闭可见性即可删除不需要的列。它们仍然在那里,但看不见

dataGridView4.Columns["some_column_name"].Visible = false;
如果在多个位置将datatable分配给网格,则可以使用DataSourceChanged事件:


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

dataGridView4.DataSource=ds.Tables[0].AsEnumerable()
.选择(行=>新建)
{
Id=行字段(“Id”),
Column2=行字段(“Column2”),
Col3=…//将所需的列放在这里
})
.CopyToDataTable();

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

dataGridView4.DataSource=ds.Tables[0].AsEnumerable()
.选择(行=>新建)
{
Id=行字段(“Id”),
Column2=行字段(“Column2”),
Col3=…//将所需的列放在这里
})
.CopyToDataTable();

您知道可以直接在sql文本中选择列和列的顺序吗?从表中选择col3、col1、col2是的,我知道,谢谢:)我是CSharp初学者,不是编程初学者。但是我想拥有从网格中选择列的功能,因为winforms在Delphi中提供了这个选项,如果我不向DBGrid添加列,那么网格将显示查询中的所有列,如果我声明列,那么它只显示声明的列。我认为这种做法非常合乎逻辑。我只是想有一个类似的功能,你知道你可以直接在sql文本中选择列和列的顺序吗?从表中选择col3、col1、col2是的,我知道,谢谢:)我是CSharp初学者,不是编程初学者。但是我想拥有从网格中选择列的功能,因为winforms在Delphi中提供了这个选项,如果我不向DBGrid添加列,那么网格将显示查询中的所有列,如果我声明列,那么它只显示声明的列。我认为这种做法非常合乎逻辑。我只想在这里有一个类似的功能谢谢,这是我一直在寻找的。不,它不能在设计时在datagrid的属性中设置,但是当我在构造函数中设置它时,它就可以工作了。谢谢,这就是我要找的。不,它不能在datagrid属性的designtime中设置,但在构造函数中设置它时,它会起作用。我正在寻找一个
简单的
解决方案,只显示designtime添加的列。法比奥更了解我的问题。谢谢我正在寻找一个
简单的
解决方案,只显示添加了设计时间的列。法比奥更了解我的问题。非常感谢。
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();