将单个数据网格与两个不同的数据源(存储过程输出和数组列表)绑定
本文关键字:存储过程 数据源 输出 绑定 列表 数组 两个 数据网 数据 单个 网格 | 更新日期: 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..
}
}
}
}
}