databound如下:protected void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
foreach (GridViewRow row in GridView1.Rows)
{
if (GridView1.DataKeys[0][0].ToString() == "1")
row.Cells[2].Text = "a";
else if (GridView1.DataKeys[0][1].ToString() == "1")
row.Cells[2].Text = "b";
else if (GridView1.DataKeys[0][2].ToString() == "1")
row.Cells[2].Text = "c";
else if (GridView1.DataKeys[0][3].ToString() == "1")
row.Cells[2].Text = "d";
else row.Cells[2].Text = "e";
}
}目的为判断几个隐藏列的内容,是1的话第3列则显示相应内容。
遇到的问题为:说有两行分别满足显示不同内容的的条件时,都显示rowindex靠前的那种,比如我想要的输出为
01 id1 a
02 id2 b
但实际输出为:
01 id1 a
02 id2 a
我在csdn搜索到过逐行修改的方法为:
foreach (GridViewRow myrow in GridView1.Rows)
{
string i = myrow.Cells[1].Text;
if (i.Contains("bb")==true)
{
myrow.Cells[1].Text = i.Replace("bb","cc");
}
}
写在GridView1_RowDataBound事件里感觉和我用的没什么不同。。
{
foreach (GridViewRow row in GridView1.Rows)
{
if (GridView1.DataKeys[0][0].ToString() == "1")
row.Cells[2].Text = "a";
else if (GridView1.DataKeys[0][1].ToString() == "1")
row.Cells[2].Text = "b";
else if (GridView1.DataKeys[0][2].ToString() == "1")
row.Cells[2].Text = "c";
else if (GridView1.DataKeys[0][3].ToString() == "1")
row.Cells[2].Text = "d";
else row.Cells[2].Text = "e";
}
}目的为判断几个隐藏列的内容,是1的话第3列则显示相应内容。
遇到的问题为:说有两行分别满足显示不同内容的的条件时,都显示rowindex靠前的那种,比如我想要的输出为
01 id1 a
02 id2 b
但实际输出为:
01 id1 a
02 id2 a
我在csdn搜索到过逐行修改的方法为:
foreach (GridViewRow myrow in GridView1.Rows)
{
string i = myrow.Cells[1].Text;
if (i.Contains("bb")==true)
{
myrow.Cells[1].Text = i.Replace("bb","cc");
}
}
写在GridView1_RowDataBound事件里感觉和我用的没什么不同。。
解决方案 »
- 网上支付功能的如何实现???(ASP.net C# & SQL 2005)
- asp.net中treeview的用法如何实现这样的效果:这个问题有哪个大虾能够解决?
- 想请问TabContainer选项卡上的值是怎么获取的?
- aspx扩展名奇怪样试问题、请大家帮忙
- 一个datagrid的问题 在线等,分虽然少点,但一定给
- 可否将数据库的score表内容生成doc文件保存,格式先不考虑(如生成表格)?
- 麻烦各位帮我看一下一段Javascript,我怎么在IE7下和firefox可以运行还原两个被带出的下拉列表的值,但是IE6不行啊
- XMLNode添加新结点的问题,请教大虾(在线等待)
- web添加不了BLL和Models的引用
- vs2012没MySql数据源
- 如何禁止页面刷新,禁止工具栏上面的刷新。。。急
- 上海找工作,需要asp.net开发的单位请留意啦。
然后就是显示列,这个是否可以理解为要么显示全部是a(任何一种)的,要么有不同就显示第一种的,那就把第一列的读出来然后判断显示那一种就好了阿
只显示一行的情况我的abc都显示正确的了;
我想实现的是同一列在不同行可以显示不同的内容,但目前没有实现,而是后面的都跟第一行显示一样;
for (int row_ind = 0; row_ind < GridView1.Rows.Count; row_ind++)
{
GridViewRow row = GridView1.Rows[row_ind];结果也是一样的
02 id2 a ... 0 1而我设想的结果应该是:
01 id1 a ... 1 0
01 id1 b ... 0 1
vs2005和xp的补丁基本都是最新的
完全可以直接使用
e.item.cells[i].text,不需要使用datakeys来定位
在后台进行修改完全可以直接用e.item.cells[i].text 来取得相应隐藏列的值,用不着使用datakey了
又忘记是2.0不是1.1了
应该是
e.Row.Cells[i].Text
应该
if (e.Row.Cell【5】.Text.Trim() == "1")
row.Cells[2].Text = "a";
else if (e.Row.Cells[6].Text.Trim()== "1")
row.Cells[2].Text = "b";
....
这应该是我这循环的问题了吧,有什么不对么?
foreach (GridViewRow row in GridView1.Rows)
{}
不用这个循环
索引超出范围。必须为非负值并小于集合大小。
参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index源错误:
if (GridView1.DataKeys[0][0].ToString() == "1")
for (int row_ind = 0; row_ind < GridView1.Rows.Count; row_ind++)
{
GridViewRow row = GridView1.Rows[row_ind];
if (GridView1.DataKeys[0][0].ToString() == "1")
row.Cells[2].Text = "a";
else if (GridView1.DataKeys[0][1].ToString() == "1")
......不过这里有些疑惑,一是jimu8130提到了rowdatabound是绑定每行数据时触发,为什么我这里还是需要一个循环;二是foreach语句ms和datakeys完全无关,为什么去掉了foreach循环后即使GridView1.DataKeys[0].ToString()都会提示index超出范围。。