DataGrid中以多列显示数据,并且对用户的点击改变其背景

该博客介绍了如何在DataGrid中以多列形式展示数据,通过转换源数据表使得一行显示多条记录。同时,实现了用户点击某列时改变其背景颜色的功能。详细步骤包括数据转换、DataGrid绑定、单元格背景设置以及ItemCommand事件处理。
部署运行你感兴趣的模型镜像
正常情况下,DataGrid的一行就是对应数据源中的一条记录!假如现在我的源数据表只有3个字段,能不能让我的DataGrid在一行中显示5条对应的记录呢?答案是肯定的!下面就来看看具体实现的方法。

假定源表中有三列,UserNM,UserID,Note。最终的DataGrid中分5列显示。

1、我们必须对源表进行转换,转换后的新表的一行就包括5条源表的记录:

private DataTable MakeDT(DataTable dt,int iCols)

////dt为待转换的源表,iCols为新表的一行包含源表的记录条数,本例为5

////转换后得到的新表的列名为从COL0开始,到COL(iCols*iColOfSrc-1)
{
int iColOfSrc = 3; ////源表待转换的列数
int ii,jj,kk,ll;
int iNewRows;
string strColNM = "";

DataTable newdt = new DataTable();
for(ii=0;ii<iCols*iColOfSrc;ii++)
{
strColNM = "COL"+ii.ToString();
newdt.Columns.Add(new DataColumn(strColNM,typeof(string)));
}
if(dt.Rows.Count == 0)
return newdt;
iNewRows = (dt.Rows.Count+iCols-1)/iCols;
kk = 0;
for(ii=0;ii<iNewRows;ii++)
{
DataRow dr = newdt.NewRow();
for(jj=0;jj<iCols;jj++)
{
kk = ii*iCols + jj;
if(kk<dt.Rows.Count)
{
ll = jj*iColOfSrc;
strColNM = "COL"+ll.ToString();
dr[strColNM] = dt.Rows[kk]["UserNM"];
ll = jj*iColOfSrc + 1;
strColNM = "COL"+ll.ToString();
dr[strColNM] = dt.Rows[kk]["UserID"];
ll = jj*iColOfSrc + 2;
strColNM = "COL"+ll.ToString();
dr[strColNM] = dt.Rows[kk]["Note"];
}
else
{
ll = jj*iColOfSrc;
strColNM = "COL"+ll.ToString();
dr[strColNM] = "";
ll = jj*iColOfSrc + 1;
strColNM = "COL"+ll.ToString();
dr[strColNM] = "";
ll = jj*iColOfSrc + 2;
strColNM = "COL"+ll.ToString();
dr[strColNM] = "";
}
}
newdt.Rows.Add(dr);
}
return newdt;
}


2、在DataGrid的Bind方法中,每次DataBind后须将所有单元格背景置为White:

////源数据表存放在ViewState["DS_UserInfo"]中,其ViewState为DataSet

void BindDataGrid()
{
if(ViewState["DS_UserInfo"] != null)
{
DataSet ds = new DataSet();
ds = (DataSet)ViewState["DS_UserInfo"];
DataTable dt = new DataTable();
dt = MakeDT(ds.Tables["tab_User"],5);////注意这里的参数5!   

this.DG_User.DataSource = dt.DefaultView;
this.DG_User.DataBind();

////以下代码将所有单元格背景置为white

int ii,jj;
for(ii=0;ii<this.DataGrid1.Items.Count;ii++)
{
if((this.DG_User.Items[ii].ItemType == ListItemType.Item)
||(this.DG_User.Items[ii].ItemType == ListItemType.AlternatingItem)
||(this.DG_User.Items[ii].ItemType == ListItemType.SelectedItem))
{
for(jj=0;jj<5;jj++)
{
this.DG_User.Items[ii].Cells[jj].BackColor = System.Drawing.Color.White;
}
}
}

}
}

3、在ItemCommand事件处理中:

private void DG_User_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
int iClick = -1;
if(e.CommandName.CompareTo("COL0") == 0)
iClick = 0;
if(e.CommandName.CompareTo("COL3") == 0)
iClick = 1;
if(e.CommandName.CompareTo("COL6") == 0)
iClick = 2;
if(e.CommandName.CompareTo("COL9") == 0)
iClick = 3;
if(e.CommandName.CompareTo("COL12") == 0)
iClick = 4;

if(iClick == -1)
return;

this.DG_User.SelectedIndex = e.Item.ItemIndex;

int ii,jj;
for(ii=0;ii<this.DG_User.Items.Count;ii++)
{
if((this.DG_User.Items[ii].ItemType == ListItemType.Item)
||(this.DG_User.Items[ii].ItemType == ListItemType.AlternatingItem)
||(this.DG_User.Items[ii].ItemType == ListItemType.SelectedItem))
{
for(jj=0;jj<5;jj++)
{
this.DG_User.Items[ii].Cells[jj].BackColor = System.Drawing.Color.White;
}
}
}
e.Item.Cells[iClick*3].BackColor = System.Drawing.Color.MediumSpringGreen;
}


4、在ASPX文件中,DataGrid的第一列为绑定COL0的按钮列,其后紧跟COL0,COL1,COL2;以此类推,绑定其他各列数据。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值