You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为点击按钮创建的新Form添加DataGridView?

实现点击按钮弹出带DataGridView的新Form

我来帮你完善这段代码,让点击指定列时弹出的新Form能正确显示带过滤数据的DataGridView。这里是调整后的完整代码,加上了关键的布局和控件添加逻辑:

if (e.ColumnIndex == dataGridView1.Columns[16].Index && e.RowIndex >= 0)
{
    int numberRow = e.RowIndex; // e.RowIndex本身就是int类型,无需额外转换
    var form2 = new Form();
    form2.Text = "历史记录详情"; // 给窗口设置清晰的标题
    form2.Size = new Size(800, 600); // 预设窗口大小,也可以加一句`form2.StartPosition = FormStartPosition.CenterScreen;`让窗口居中显示

    // 创建DataGridView并配置基础属性
    var historygridview = new DataGridView();
    historygridview.Dock = DockStyle.Fill; // 让DataGridView自动填满整个窗口,适配窗口大小变化
    historygridview.AutoGenerateColumns = true; // 自动根据数据源生成列(如果需要自定义列可设为false)
    historygridview.ReadOnly = true; // 设置为只读,避免用户误编辑历史数据
    historygridview.AllowUserToAddRows = false; // 隐藏底部自动生成的空行
    historygridview.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; // 让列自动填充窗口宽度

    // 处理数据源与过滤逻辑
    var dt = sIMSDataSet.History;
    // 处理单元格空值,避免空引用异常
    string SMNumber = dataGridView1.Rows[numberRow].Cells[3].Value?.ToString() ?? string.Empty;
    // 转义单引号,防止RowFilter语法报错(如果SM编号里包含单引号)
    string safeSMNumber = SMNumber.Replace("'", "''");
    var dv = new DataView(dt)
    {
        RowFilter = $"SM = '{safeSMNumber}'"
    };

    // 绑定数据源到DataGridView
    historygridview.DataSource = dv;

    // 关键步骤:将DataGridView添加到Form的控件集合,否则控件不会显示在窗口上
    form2.Controls.Add(historygridview);

    form2.Show();
}

关键细节说明:

  • 控件显示核心:必须通过form2.Controls.Add(historygridview)把DataGridView加入Form的控件集合,这是新手容易遗漏的点,不加的话控件只会在内存中创建,不会显示在窗口上。
  • 布局优化:用Dock = DockStyle.Fill替代手动设置Location和Size,让表格自动适配窗口大小,体验更流畅。
  • 数据安全与容错:处理了单元格空值和单引号转义,避免运行时出现空引用或语法错误。
  • 用户体验优化:设置只读、隐藏空行等属性,让历史记录表格更符合查看场景的需求。

如果需要自定义列(比如修改列标题、调整列宽或顺序),可以把AutoGenerateColumns设为false,手动添加列,示例:

historygridview.AutoGenerateColumns = false;
// 添加自定义列
historygridview.Columns.Add(new DataGridViewTextBoxColumn
{
    DataPropertyName = "SM", // 对应数据源的列名
    HeaderText = "SM编号", // 显示的列标题
    Width = 150
});
// 继续添加其他需要的列...

内容的提问来源于stack exchange,提问作者James Morrish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:29:41