datagridview 行visible设置问题

探讨了在窗体加载事件中修改DataGridView行可见性的挑战,解释了由于界面初始化问题导致的修改失效,并建议在窗体shown事件中进行修改以确保效果持久。提供了避免常见错误的实用解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做项目时,遇到了datagridview行visible设置无效的问题!

我在窗体的load事件中修改datagridview某些row的visible,但是窗体显示时,做的修改无效!经过调试以及网上查资料,终于明白:在窗体load事件中,可能由于窗体界面初始化还没有完成,对datagridview做的修改,会在界面初始化完成后,被重置!因此,应该在窗体的shown事件中,对datagridview进行修改,会比较保险!!

参考资料

### DataGridView 表格属性设置方法 在 C# WinForms 中,`DataGridView` 是一个功能强大的控件,用于显示表格数据。通过设置其属性,可以自定义表格的外观和为。以下是一些常用的属性设置方法[^1]: #### 1. 设置数据源 可以通过 `DataSource` 属性为 `DataGridView` 绑定数据源。如果需要支持动态更新,推荐使用 `BindingList<T>` 而不是普通的 `List<T>`,因为 `BindingList<T>` 会在数据更改时触发事件[^2]。 ```csharp // 示例:将 List 转换为 BindingList 并绑定到 DataGridView var dataList = new List<MyClass> { new MyClass { Name = "Item1" }, new MyClass { Name = "Item2" } }; var bindingList = new BindingList<MyClass>(dataList); dataGridView1.DataSource = bindingList; ``` #### 2. 隐藏列或调整列宽 可以使用 `DataGridViewColumn` 的属性来控制列的为和外观。 - **隐藏列**:通过设置 `DataGridViewColumn.Visible` 属性为 `false`。 - **调整列宽**:使用 `DataGridViewColumn.Width` 或启用自动调整列宽功能。 ```csharp // 示例:隐藏某一列并调整另一列宽度 dataGridView1.Columns["ColumnName"].Visible = false; // 隐藏列 dataGridView1.Columns["AnotherColumn"].Width = 200; // 设置列宽 dataGridView1.AutoResizeColumns(); // 自动调整所有列宽 ``` #### 3. 禁用编辑功能 如果希望用户无法编辑表格中的内容,可以设置 `DataGridView.setEditable(false)`。 ```csharp dataGridView1.ReadOnly = true; // 设置整个表格为只读 ``` #### 4. 设置高和字体 可以通过 `RowTemplate.Height` 和 `DefaultCellStyle.Font` 来调整高和字体。 ```csharp dataGridView1.RowTemplate.Height = 30; // 设置dataGridView1.DefaultCellStyle.Font = new Font("Arial", 12); // 设置字体 ``` #### 5. 添加或移除列 可以通过 `DataGridView.Columns` 集合来添加或移除列。 ```csharp // 示例:添加一列 DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn(); column.Name = "NewColumn"; column.HeaderText = "新列"; dataGridView1.Columns.Add(column); // 示例:移除一列 dataGridView1.Columns.Remove("ColumnName"); ``` #### 6. 处理单元格选择事件 类似于 `ListBox` 的选择事件处理,`DataGridView` 提供了 `CellClick` 或 `SelectionChanged` 事件来响应用户交互。 ```csharp private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0 && e.ColumnIndex >= 0) { string selectedValue = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); MessageBox.Show("你选择了:" + selectedValue); } } ``` ### 注意事项 - 如果需要动态更新数据,请确保使用支持事件通知的数据结构(如 `BindingList<T>`)。 - 在绑定复杂对象时,确保对象的属性具有公共的 getter 和 setter 方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值