C# 在dgv1中选择一条数据右击出现菜单栏“测试过程”点击测试过程获取Sn 通过Sn在五个数据库中分别找到相关数据 并组合显示到dgv2
时间: 2024-02-27 14:54:42 浏览: 67
好的,我理解你的需求。你需要在 dgv1 中选择一条数据,右击出现菜单栏“测试过程”,点击“测试过程”后获取 Sn 值,并在五个数据库中分别查找与该 Sn 相关的数据,最后将这些数据组合显示到 dgv2 中。
下面是一个实现思路:
1. 在 dgv1 上添加一个上下文菜单,菜单中添加一个“测试过程”选项。
2. 在 dgv1 的右键菜单事件中,获取选中行的 Sn 值,并在五个数据库中分别查找相关数据。
3. 将五个数据库中查询到的数据组合起来,并绑定到 dgv2 上。
下面是一个简单的示例代码,供你参考:
```csharp
private void dgv1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
// 获取当前鼠标所在的行
int rowIndex = dgv1.HitTest(e.X, e.Y).RowIndex;
if (rowIndex >= 0)
{
// 选中整行
dgv1.ClearSelection();
dgv1.Rows[rowIndex].Selected = true;
// 显示上下文菜单
contextMenuStrip1.Show(dgv1.PointToScreen(new Point(e.X, e.Y)));
}
}
}
private void 测试过程ToolStripMenuItem_Click(object sender, EventArgs e)
{
// 获取 Sn 值
string sn = dgv1.SelectedRows[0].Cells["Sn"].Value.ToString();
// 在五个数据库中查找相关数据
List<DataRow> dataList = new List<DataRow>();
for (int i = 1; i <= 5; i++)
{
using (SqlConnection conn = new SqlConnection($"Data Source=Server{i};Initial Catalog=Database{i};Integrated Security=True"))
{
conn.Open();
string sql = $"SELECT * FROM Table{i} WHERE Sn='{sn}'";
SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
DataTable dt = new DataTable();
adapter.Fill(dt);
foreach (DataRow row in dt.Rows)
{
dataList.Add(row);
}
}
}
// 组合数据
DataTable resultDt = new DataTable();
resultDt.Columns.Add("Sn");
resultDt.Columns.Add("Data1");
resultDt.Columns.Add("Data2");
foreach (DataRow row in dataList)
{
DataRow newRow = resultDt.NewRow();
newRow["Sn"] = row["Sn"];
newRow["Data1"] = row["Data1"];
newRow["Data2"] = row["Data2"];
resultDt.Rows.Add(newRow);
}
// 将数据显示到 dgv2 中
dgv2.DataSource = resultDt;
}
```
需要注意的是,这只是一个示例代码,实际应用中还要根据具体情况进行一些优化,并且需要在窗体加载时为 dgv1 添加上下文菜单。
阅读全文