有关DataGrid按钮列的问题,还请高手相助,在线等待,马上结帐,分数虽然不多,不过我已经尽力啦,兄弟们:)

qq_net 2003-12-26 07:33:20
有关DATAGRID中按钮列的问题
我在一DATAGRID中定义了两个按钮列(这里我插入了图片来代替文本信息),然后在服务器端将数据绑定在此DATAGRID上.由于不同数据的状态不同(比如说可用或不可用),我应如何根据这些数据的不同状态来改变相应按钮列的文本信息(这里是图片).也就是说对于不同的数据,如何在服务器端控件此条数据对应按钮列的文本信息!
///////////////////////////////客户端////////////////////////////////////
<asp:datagrid id="MyGrid1" runat="server" CellPadding="4" BackColor="White" BorderWidth="1px"
BorderStyle="Double" BorderColor="#666666" OnPageIndexChanged="MyGrid1_PageIndexChanged" OnItemCommand="MyGrid1_ItemCommand"
PageSize="1" AllowPaging="True" Width="100%">
<SelectedItemStyle Font-Bold="True" ForeColor="Black" BackColor="#D5F1FF"></SelectedItemStyle>
<AlternatingItemStyle ForeColor="Black" BackColor="White"></AlternatingItemStyle>
<ItemStyle Font-Size="9pt" ForeColor="#666666" BackColor="White"></ItemStyle>
<HeaderStyle Font-Size="10pt" Font-Names="新宋体" Font-Bold="True" HorizontalAlign="Center" ForeColor="#666666"
BackColor="#F6F6F6"></HeaderStyle>
<FooterStyle HorizontalAlign="Center" ForeColor="#FF0066" BackColor="White"></FooterStyle>
<Columns>
<asp:ButtonColumn Text="<img src='Images/yw.gif' border=0 align=center width=20 height=25>"
HeaderText="详细信息" CommandName="Display">
<HeaderStyle Width="40px"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" ForeColor="#127AC9" VerticalAlign="Middle"></ItemStyle>
</asp:ButtonColumn>
</Columns>
<PagerStyle HorizontalAlign="Left" ForeColor="#333333" BackColor="White" Mode="NumericPages"></PagerStyle>
</asp:datagrid>
///////////////////////////////服务器端////////////////////////////////////
private void BindGrid()
{
DataTable dt;
for(int i=0;i<myDataTable.Rows.Count;i++)
{
DataRow dr=dt.NewRow();
if(myDataTable.Rows[i]["状态"]==1)
{
dr["状态"]=1;
//这里如何改变本行数据对应的按钮列的文本信息?
}
else
{
dr["状态"]=0;
//这里如何改变本行数据对应的按钮列的文本信息?
}
dr[Column1]="11";
dr[Column2]="22";
dt.Rows.Add dr
}
MyGrid1.DataSource=dt.DefaultView;
MyGrid1.DataBind();
}

还请高手们不吝赐教,小弟非常感谢!!!!!
...全文
39 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
wszl 2003-12-29
  • 打赏
  • 举报
回复
应该用e.Item.Cells[1].Controls[1],Controls[0]好象是个<td>之类的东西。
windancer 2003-12-29
  • 打赏
  • 举报
回复
control里面可能多了一个literalcontrol,所以下标换成1看看e.Item.Cells[1].Controls[1]
webdiyer 2003-12-29
  • 打赏
  • 举报
回复
你在代码中删除了一列是什么意思?如果象你最初的代码,超出索引的应该是Cells[1]。帖出你的代码看看。
windancer 2003-12-29
  • 打赏
  • 举报
回复
你把按钮列转换为模板列,然后给linkButton一个ID,然后用e.item.findcontrol("LinkButtonID")
qq_net 2003-12-29
  • 打赏
  • 举报
回复
是的,是两个按钮列,后来我在代码中删除了一个,所以代码应该是:
LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];
关键的问题并不在于第几列(即:Cell的索引值),而是Controls的索引值,总是报错!
peterlee168 2003-12-29
  • 打赏
  • 举报
回复
up
qq_net 2003-12-29
  • 打赏
  • 举报
回复
再次感谢webdiyer(陕北吴旗娃)

请参与下一个问题:非常欢迎
http://expert.csdn.net/Expert/topic/2609/2609621.xml?temp=.4256708
qq_net 2003-12-29
  • 打赏
  • 举报
回复
还有一个问题,希望大家讨论,三个问题一起结帐,O)K:)
webdiyer 2003-12-29
  • 打赏
  • 举报
回复
一样,可以在ItemDataBound事件中处理,象上面那样先找那那个LinkButton,然后把它的Enabled属性设为false。
qq_net 2003-12-29
  • 打赏
  • 举报
回复
问题已解决,非常感谢webdiyer(陕北吴旗娃)及其它朋友的支持,还有一个问题就是如何将连接列(linkButton)中的某一条数据的链接去掉呢?
windancer 2003-12-29
  • 打赏
  • 举报
回复
在DataGrid1_ItemDataBound里写

Dim ctl As Control
For Each ctl In e.Item.Cells(i).Controls
if ctl.GetType.ToString = "System.Web.UI.WebControls.LinkButton" then
'do Something
End if
Next
waj2000 2003-12-29
  • 打赏
  • 举报
回复
DataGrid1_ItemDataBound(object src,DataGridItemEventArgs e){
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem){
//假设你的按钮在第二列,并且是一个LinkButton
LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];
if(button!=null){
if(e.item.cells[2].Text == "状态是0") //这儿假设你要参考的信息绑定在第三列
button.Text="状态是0";
else
button.Text="你随便修改";
}
}
}
qq_net 2003-12-29
  • 打赏
  • 举报
回复
在线等待,急急急!
qq_net 2003-12-29
  • 打赏
  • 举报
回复
现在的"按钮类型"是"LinkButton"
qq_net 2003-12-29
  • 打赏
  • 举报
回复
========================================客户端====================================
<asp:datagrid id="MyGrid1" runat="server" OnItemDataBound="MyGrid1_OnItemDataBound" CellPadding="4"
BackColor="White" BorderWidth="1px" BorderStyle="Double" BorderColor="#666666" OnPageIndexChanged="MyGrid1_PageIndexChanged"
OnItemCommand="MyGrid1_ItemCommand" PageSize="3" AllowPaging="True" Width="100%">
<SelectedItemStyle Font-Bold="True" ForeColor="Black" BackColor="#D5F1FF"></SelectedItemStyle>
<AlternatingItemStyle ForeColor="Black" BackColor="White"></AlternatingItemStyle>
<ItemStyle Font-Size="9pt" ForeColor="#666666" BackColor="White"></ItemStyle>
<HeaderStyle Font-Size="10pt" Font-Names="新宋体" Font-Bold="True" HorizontalAlign="Center" ForeColor="#666666"
BackColor="#F6F6F6"></HeaderStyle>
<FooterStyle HorizontalAlign="Center" ForeColor="#FF0066" BackColor="White"></FooterStyle>
<Columns>
<asp:ButtonColumn Text="<img src='Images/select.gif' border=0 align=center width=25 height=25>"
HeaderText="选择" CommandName="Select">
<HeaderStyle Width="40px"></HeaderStyle>
<ItemStyle Font-Size="20px" Font-Bold="True" HorizontalAlign="Center" ForeColor="#127AC9" VerticalAlign="Middle"></ItemStyle>
</asp:ButtonColumn>
<asp:ButtonColumn Text="<img src='Images/yw.gif' border=0 align=center width=20 height=25>"
HeaderText="查看原文" CommandName="Display">
<HeaderStyle Width="40px"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" ForeColor="#127AC9" VerticalAlign="Middle"></ItemStyle>
</asp:ButtonColumn>
</Columns>
<PagerStyle HorizontalAlign="Left" ForeColor="#333333" BackColor="White" Mode="NumericPages"></PagerStyle>
</asp:datagrid>



================================================================================
非常感谢以上各位的帮助,我把客户端的代码贴出来啦:)
qq_net 2003-12-27
  • 打赏
  • 举报
回复
试试先,多谢,希望大家一起进步
webdiyer 2003-12-27
  • 打赏
  • 举报
回复
你最初的帖子说有两个按钮列,但代码中却只有一个按钮列,如果你要取第一列的按钮,应该将我上面代码中的
LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];

改为
LinkButton button=(LinkButton)e.Item.Cells[0].Controls[0];
tianweima 2003-12-27
  • 打赏
  • 举报
回复
LinkButton button=(LinkButton)e.Item.Cells[1].Controls[1];
不行也可试试用2,一般参数0是用于默认编辑框用的
wd_318 2003-12-27
  • 打赏
  • 举报
回复
你的按钮列好象是在第一列,
LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];
改成:
LinkButton button=(LinkButton)e.Item.Cells[0].Controls[0];
再试试
qq_net 2003-12-27
  • 打赏
  • 举报
回复
不对呀,我改了也不行呀,而且还经常提示这一句有误
LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];
错误信息如下:
Controls[0]超出了索引范围
加载更多回复(7)
目前小菜总结了两种方法: 一、datagrid绑定数据是通过HTML设置好的

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧