winform做一个页面,可以查询数据导回到datagrid,现在想在最后一列做一个按钮,如果返回的这行数据有a字段数据则显示,并且点击可以打开b窗口并将a数据传过去,且a字段是最后一列,不希望它显示在datagrid,请写出代码
时间: 2024-09-10 08:30:28 浏览: 21
在Windows Form中,你可以使用DataGridView控件来展示数据,同时自定义最后一列的行为。以下是一个简单的示例,展示了如何做到这一点:
```csharp
using System;
using System.Data;
using System.Windows.Forms;
public partial class MainForm : Form
{
private DataTable dataTable; // 假设这是你的数据源
public MainForm()
{
InitializeComponent();
InitializeDataGridView();
}
private void InitializeDataGridView()
{
dataGridView1.AutoGenerateColumns = false; // 防止自动生成所有列
// 添加DataColumn
DataColumn columnA = new DataColumn("AField");
dataGridView1.Columns.Add(columnA);
// 创建最后一列,包含按钮
DataGridViewTextBoxColumn buttonColumn = new DataGridViewTextBoxColumn();
buttonColumn.HeaderText = "Action"; // 显示为"Action"
buttonColumn.DataPropertyName = ""; // 设置数据绑定为空,不显示在数据表上
buttonColumn.DefaultCellStyle.Width = 0; // 设置宽度为0,隐藏单元格内容
dataGridView1.Columns.Add(buttonColumn);
// 绑定数据到网格
dataGridView1.DataSource = dataTable;
// 完成事件处理
dataGridView1.CellContentClick += DataGridView_CellContentClickHandler;
}
private void DataGridView_CellContentClickHandler(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == dataGridView1.Columns.Count - 1 && e.RowIndex >= 0) // 确保点击的是最后一列并且不是空行
{
var dataRow = dataGridView1.Rows[e.RowIndex].DataBoundItem as DataRowView; // 获取DataRowView
string aValue = dataRow["AField"].ToString();
// 检查是否有值
if (!string.IsNullOrEmpty(aValue))
{
OpenBWindow(aValue); // 打开B窗口并传递a字段值
}
}
}
private void OpenBWindow(string aValue)
{
BForm bForm = new BForm(); // 假设BForm是另一个窗体
bForm.AValue = aValue;
bForm.ShowDialog(); // 弹出B窗口
}
// 假设你已经有一个DataTable或者数据集作为dataTable变量
}
// BForm类用于展示B窗口
public partial class BForm : Form
{
public string AValue { get; set; }
public BForm()
{
InitializeComponent();
txtAField.Text = AValue; // 在文本框txtAField中显示A字段值
}
}
```