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

原创 2006年06月19日 14:46:00
正常情况下,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;以此类推,绑定其他各列数据。

如何用DataGrid实现类似DataList多列的效果

 上一次说了怎么利用DataGrid纵向显示 http://www.cnblogs.com/lovecherry/archive/2005/04/23/143819.html 其实这么做的好处在于Da...
  • jelink
  • jelink
  • 2006年08月25日 16:17
  • 692

LabVIEW多列列表框背景颜色操作

多列列表框概述在很多情况下我们需要在表格中某一列查找一些指定的元素,并且想让其显示为指定的颜色,此时就可以利用多列列表框的一些属性来解决这一问题。...
  • u014786187
  • u014786187
  • 2017年08月07日 17:27
  • 1015

统计easyui datagrid某列之和显示在对应列下面

本示例将计算easyui datagrid某些列的数据求和,然后将求和的数据显示在所在easyui列的最下面,实现统计功能,效果如下图 $(function () ...
  • u010982856
  • u010982856
  • 2015年12月03日 10:24
  • 1598

一行多列的下拉多选框

一行多列的下拉多选框很简单的一行多列的下拉多选框,就当是学习编写jquery插件的例子,该例子依赖jquery相关js代码:/** * 下拉多选插件,支持一行显示过个input框,显示多行 * ...
  • u012656861
  • u012656861
  • 2017年12月02日 18:49
  • 34

WPF Grid + DataGrid多表头 动态列实现

Grid + DataGrid简单实现了多表头,动态列。Mark~
  • i0703mtf
  • i0703mtf
  • 2016年12月12日 20:34
  • 2453

改变DataGrid单元格颜色

WPF中经常使用DataGrid来显示表格数据,我的做法是把数据先放在一个DataTable中,然后再绑定到DataGrid中,以后要读写数据就直接操作DataTable,DataGrid仅仅是一个显...
  • falcomavin
  • falcomavin
  • 2016年06月24日 11:19
  • 2985

oracle 实现分组结果集整合到一行多列显示

刚刚接触数据库的真正应用,刚开始有很多困难,在网上找答案也没有十分靠谱的结果,现在我把自己的经验总结下来,希望能给广大小鲜肉一点灵感,不胜荣幸。 比如要实现如下的功能,将表中的数据检索出来,放入到下...
  • Run_youngman
  • Run_youngman
  • 2016年12月22日 15:55
  • 1341

easyui之datagrid动态修改列

easyui datagrid 定义列的方式通常是: $('#grid').datagrid({columns:[[ {field:'f1',title:'字段1',width:160}...
  • liuxiao723846
  • liuxiao723846
  • 2015年08月28日 15:12
  • 2954

多行多列控件:UICollectionView

本章通过先总体介绍UICollectionView及其常用方法,再结合一个实例,了解如何使用UICollectionView。   UICollectionView 和 UICollectionV...
  • xiaoyangsavvy
  • xiaoyangsavvy
  • 2015年03月05日 21:27
  • 1898

EXCEL完成多条件多结果查找&多行多列变一列

其实我本来对EXCEL是一窍不通的,直到我舅舅给了一串大概1500多行的药品供应目录让帮他我查找。当他告诉他们平时都是花1~2天人工填写查找的时候,我当时就惊呆了,心想EXCEL设计者肯定已经哭晕在厕...
  • Z5337209
  • Z5337209
  • 2015年02月28日 20:54
  • 3889
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DataGrid中以多列显示数据,并且对用户的点击改变其背景
举报原因:
原因补充:

(最多只允许输入30个字)