关于dataGrid列的C#beginner q

时间:2015-12-31 10:23:17

标签: 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];

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

我做错了什么?

3 个答案:

答案 0 :(得分:2)

  

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

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

我不确定,但担心此设置无法通过设计师设置。只需将它放在InitializeComponents()

之后的Form构造函数中

答案 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();