使用两个diff数据源绑定单个datagrid(存储过程输出和ArrayList)

时间:2015-05-29 07:14:06

标签: c# datagridview

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

存储过程是:

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]

1 个答案:

答案 0 :(得分:0)

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

dgrv_allkey.DataBindingComplete += dgrv_allkey_DataBindingComplete;

然后将存储过程的结果集添加为grid datasoruce:

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..
                }
            }
        }
    }
}