问一个简单问题,如何取得datagrid中某一列的值?

menghui1 2003-05-27 10:25:29
我想在datagridupdate()函数中正加判断语句,如果"更新标志“列的值为1,则不允许修改,请问如何取得”更新标志“列的值,我写了一条语句:
public void DataGrid1_Update(Object sender, DataGridCommandEventArgs e)
{
string item = ((TextBox)e.Item.FindControl("更新标志")).Text;
if (item == "1")
{ ...
}
else{
}
}
错误提示:System.NullReferenceException: 未将对象引用设置到对象的实例。
源错误:

string item = ((TextBox)e.Item.FindControl("更新标志")).Text;
请问该怎么改?
...全文
43 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiongliang2003 2003-05-27
  • 打赏
  • 举报
回复
行 95: button=(Button)e.Item.Cells[29].Controls[0];

改为 button=(Button)e.Item.Cells[29].FindControl["控件id"];
menghui1 2003-05-27
  • 打赏
  • 举报
回复
to lionzhf(忆昔)
异常详细信息: System.ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。参数名:index

源错误:


行 93:
行 94: Button button=new Button();
行 95: button=(Button)e.Item.Cells[29].Controls[0];
行 96: button.Enabled=false;
行 97: }

怎么办?
menghui1 2003-05-27
  • 打赏
  • 举报
回复
谢谢lionzhf(忆昔) ,我正在试,等一会再问。
lionzhf 2003-05-27
  • 打赏
  • 举报
回复
如果是模板列:button=(Button)e.Item.Cells[5].Controls[0];这一句话变成
button=(Button)e.Item.Cell[5].Item.Cell.[5].FindControl["控件id"]
lionzhf 2003-05-27
  • 打赏
  • 举报
回复
if(e.Item.ItemType == ListItemType.Item ||e.Item.ItemType==ListItemType.AlternatingItem||e.Item.ItemType==ListItemType.EditItem)
{

Button button=new Button();
button=(Button)e.Item.Cells[5].Controls[0];
button.Enabled=false;
}
加上前面判断的这一句就不会出现index超出范围了
冰河绝恋 2003-05-27
  • 打赏
  • 举报
回复
如果是模板列该咋个办呢?
menghui1 2003-05-27
  • 打赏
  • 举报
回复
请问 kinglht(爱新觉罗至尊宝) :
如何将模板列的readonly属性设为true!我的代码如下:
<asp:TemplateColumn HeaderText="更新标志" SortExpression="更新标志" ReadOnly="True">
<ItemTemplate>
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "更新标志", "{0}") %>'/>
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox runat="server" id="gxbz" Checked='<%# DataBinder.Eval(Container.DataItem, "更新标志") %>'/>
</EditItemTemplate>
</asp:TemplateColumn>
运行出错:
类型“System.Web.UI.WebControls.TemplateColumn”不具有名为“ReadOnly”的属性
请高手回答,谢谢!在线等待
ld_key 2003-05-27
  • 打赏
  • 举报
回复
if (((Label)e.Item.Cells[29].Controls[0]).Text == "True")

label-->text?
menghui1 2003-05-27
  • 打赏
  • 举报
回复
to kinglht(爱新觉罗至尊宝) :
更新标志是 boundcolumn列,没有id属性,我改为:
<asp:BoundColumn HeaderText="更新标志" SortExpression="更新标志" DataField="更新标志" ReadOnly="True" id="gxbz"/>
错误提示:
类型“System.Web.UI.WebControls.BoundColumn”不具有名为“id”的属性
请问应如何改?
kinglht 2003-05-27
  • 打赏
  • 举报
回复
更新标志是不是一列啊?你可以使用模版列,然后编辑模版列,在该列放CheckBox控件,将该列的readonly属性设为true!
kinglht 2003-05-27
  • 打赏
  • 举报
回复
把“FindControl("更新标志")).”里边的更新标志改为TextBox的ID!!
menghui1 2003-05-27
  • 打赏
  • 举报
回复
to daosh()
改成用label也不行,相同错误。另外iteral是什么意思?
daosh 2003-05-27
  • 打赏
  • 举报
回复
改成用label或iteral(这个单词我不熟-_-)来显示?
menghui1 2003-05-27
  • 打赏
  • 举报
回复
谢谢回复。
to xiongliang2003() :
更新标志是 boundcolumn,我按你的方法试了一下,改为:if (((TextBox)e.Item.Cells[29].Controls[0]).Text == "True"),可以运行。可又有新问题:
我希望更新标志列为只读,不能修改,这样救出问题了
System.ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。参数名:index
原错误:
if (((Label)e.Item.Cells[29].Controls[0]).Text == "True")
把更新标志列去掉只读就正常,请问几位如何修改?
v192 2003-05-27
  • 打赏
  • 举报
回复
怀疑你是否是使用动态生成的DataGrid列
zwztu 2003-05-27
  • 打赏
  • 举报
回复
e.Item.Cells[i].Text
xiongliang2003 2003-05-27
  • 打赏
  • 举报
回复
你的"更新标志"是什么列 ,是不是 boundcolumn啊 ,如果是的话 就只能用 e.Item.Cells[index].Text 其中index是该列的序号
menghui1 2003-05-27
  • 打赏
  • 举报
回复
问题已解决,修改代码如下:
int numCols = e.Item.Cells.Count;
if (e.Item.Cells[numCols-1].Text == "True")
谢谢各位的回复,散分!
bsky8021 2003-05-27
  • 打赏
  • 举报
回复
e.Columns[i].Enable=false就可搞定一个列的只读问题

62,074

社区成员

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

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

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

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