You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#中如何在GridView显示数据库指定行及按列名添加至dgvSale

实现C#中GridView展示指定行及DataGridView数据迁移的解决方案

我来帮你搞定这两个需求,下面是具体的实现代码和关键说明,你可以直接参考或者调整适配你的场景:

1. 在GridView中展示数据库指定行

首先,我们需要通过数据库查询获取指定行数据,再绑定到GridView控件上。这里以SQL Server为例,假设你要查询Orders表中Status = 'Completed'的行:

using System.Data;
using System.Data.SqlClient;

// 数据库连接字符串(建议放在配置文件中,这里直接写示例)
string connectionString = "Server=YOUR_SERVER;Database=YOUR_DB;User Id=YOUR_USER;Password=YOUR_PWD;";

// 查询指定行的SQL语句,根据你的需求修改WHERE条件
string query = "SELECT OrderId, CustomerName, OrderDate, TotalAmount FROM Orders WHERE Status = 'Completed';";

try
{
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter(query, conn);
        DataTable dt = new DataTable();
        adapter.Fill(dt);
        
        // 将DataTable绑定到GridView
        yourGridViewID.DataSource = dt;
        yourGridViewID.DataBind(); // Web Forms中需要调用DataBind(),WinForms则不需要
    }
}
catch (Exception ex)
{
    // 异常处理,比如提示用户
    MessageBox.Show($"加载数据失败:{ex.Message}"); // WinForms场景
    // Web Forms场景可改用Label显示:errorLabel.Text = $"加载数据失败:{ex.Message}";
}

关键说明:

  • 替换YOUR_SERVERYOUR_DB等为你的实际数据库信息,建议把连接字符串放在App.config/Web.config中,方便后续维护。
  • 调整query中的WHERE子句来匹配你要展示的指定行(比如按ID、日期范围等筛选)。
  • Web Forms的GridView必须调用DataBind()才能显示数据;WinForms的DataGridView只需设置DataSource即可自动渲染。

2. 通过GridView列名将指定行添加到dgvSale(DataGridView)

假设你是通过点击GridView的行来触发添加操作,下面分WinForms和Web Forms两种常见场景给出代码:

场景1:WinForms环境(DataGridView之间的迁移)

如果你的源控件是WinForms的DataGridView,可以在其CellClick事件中处理:

private void yourGridView_CellClick(object sender, DataGridViewCellEventArgs e)
{
    // 确保点击的是数据行,不是表头
    if (e.RowIndex >= 0)
    {
        DataGridViewRow selectedRow = yourGridView.Rows[e.RowIndex];
        
        // 创建新行并克隆源行结构
        DataGridViewRow newRow = (DataGridViewRow)selectedRow.Clone();
        
        // 遍历列,通过列名匹配赋值(确保两个控件列名一致)
        foreach (DataGridViewColumn col in yourGridView.Columns)
        {
            newRow.Cells[col.Name].Value = selectedRow.Cells[col.Name].Value;
        }
        
        dgvSale.Rows.Add(newRow);
    }
}

场景2:Web Forms环境(GridView到DataGridView的迁移)

如果是Web Forms的GridView,通常会给每行添加一个"添加"按钮,在RowCommand事件中处理:

protected void yourGridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "AddToSale")
    {
        // 获取当前行索引
        int rowIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow selectedRow = yourGridView.Rows[rowIndex];
        
        // 假设dgvSale已绑定DataTable作为数据源,创建新行并赋值
        DataRow newRow = ((DataTable)dgvSale.DataSource).NewRow();
        
        // 通过列名匹配赋值,注意数据类型转换
        newRow["OrderId"] = int.Parse(selectedRow.Cells["OrderId"].Text);
        newRow["CustomerName"] = selectedRow.Cells["CustomerName"].Text;
        newRow["TotalAmount"] = decimal.Parse(selectedRow.Cells["TotalAmount"].Text);
        
        ((DataTable)dgvSale.DataSource).Rows.Add(newRow);
        dgvSale.Refresh();
    }
}

关键说明:

  • 确保两个控件的列名完全一致,这样通过列名匹配赋值才不会出错。
  • 如果dgvSale还未初始化数据源,建议先创建结构匹配的DataTable并绑定:
    // 初始化dgvSale的数据源结构
    DataTable saleTable = new DataTable();
    saleTable.Columns.Add("OrderId", typeof(int));
    saleTable.Columns.Add("CustomerName", typeof(string));
    saleTable.Columns.Add("TotalAmount", typeof(decimal));
    dgvSale.DataSource = saleTable;
    
  • 处理数据类型转换时要加异常判断,避免因空值或格式错误导致崩溃。

内容的提问来源于stack exchange,提问作者Furqan Rustam

火山引擎 最新活动