将单个数据网格与两个不同的数据源(存储过程输出和数组列表)绑定

本文关键字:存储过程 数据源 输出 绑定 列表 数组 两个 数据网 数据 单个 网格 | 更新日期: 2023-09-27 17:51:07

我有一个数据网格,我想用它显示三个列。我使用存储过程将一些记录显示到数据网格中。

存储过程是:

procedure [dbo].[allKeys]
AS 
select id,key,username from keys_TB

这个过程中的密钥是加密的,所以需要转换它,我已经完成了转换,并保持这些密钥是ArrayList。

但问题是已将剩余的id,username列绑定到datagrid,无法将ArrayList绑定到datagrid。

背后代码:

DataSet ds = clsBusinessLogic.allKeys();
dgrv_allkey.DataSource = ds.Tables[0];
dgrv_allkey.AutoGenerateColumns = false;
dgrv_allkey.Columns["id"].DataPropertyName = "id";
DataGridViewColumn id = dgrv_allkey.Columns[0];
this.dgrv_allkey.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
id.Width = 60;
dgrv_allkey.Columns["username"].DataPropertyName = "username";
DataGridViewColumn Custname = dgrv_allkey.Columns[2];
Custname.Width = 199;
this.dgrv_allkey.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;

这就是我如何绑定id和用户名到datagrid,但没有关于键的任何线索。

和我已经通过clsBusinessLogic.allKeys()方法调用了存储过程[allKeys]

将单个数据网格与两个不同的数据源(存储过程输出和数组列表)绑定

首先向网格添加一个数据绑定完成事件:

dgrv_allkey.DataBindingComplete += dgrv_allkey_DataBindingComplete;

然后添加存储过程的结果集作为网格数据源:

dgrv_allkey.DataSource = ds.Tables[0];
dgrv_allkey.Columns["id"].DataPropertyName = "id";
////and other formating what ever needed. 

由于设置了数据源,事件将被触发,然后在此事件中更改每行的键单元格的值。

private void dgrv_allkey_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    // Change Column Value for the DataGridView. 
    foreach (DataGridViewColumn i in dataGridView1.Columns)
    {
        if (i.Name == "key")
        {
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                string oldvalue = row.Cells["key"].Value as string;
                if (!string.IsNullOrEmpty(oldvalue))
                {
                    // perform decoding here and set the decoded value here..
                }
            }
        }
    }
}