Cells —— 返回行包含的所有TableCell(不管是显示声明的,还是自动生成的,不管是可以看见的,还是隐藏掉的),通过TableCell,可以读取Cell中显示的文本、包含的控件
严重注意:只有BoundColumn列和自动生成列,才可以通过TableCell.Text属性读取显示的文本。HyperLinkColumn、ButtonColumn、EditCommandColumn都需要将目标控件转换成相应的控件。
比如:
假设DataGrid的第一列声明如下
<asp:HyperLinkColumn DataTextField="au_id" HeaderText="au_id" DataNavigateUrlField="au_id" DataNavigateUrlFormatString="Edit.aspx?id={0}"></asp:HyperLinkColumn>
读取的时候可以用:
//Items[0]表示第一行,Cells[0]表示第一列,Controls[0]表示Cell中的第一个控件(也只有这个控件可以用)
HyperLink link = (HyperLink)DataGrid1.Items[0].Cells[0].Controls[0]);
Response.Write(link.Text);
至于模板列(TemplateColumn),当然也可以通过DataGrid1.Items[i].Cells[j].Controls[n]来获取,然后转换成原来的控件类型再操作,但是还有个更好的办法,就是用FindControl来查找控件。
FindControl是System.Web.UI.Control的方法,可以根据子控件ID来查找子控件
比如:
假设DataGrid的某一列声明如下
<asp:TemplateColumn>
<ItemTemplate>
<asp:TextBox Runat="server" ID="txtID" Text='<%# DataBinder.Eval(Container.DataItem,"au_id") %>'>
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
读取方法:
TextBox txt = (TextBox)DataGrid1.Items[1].FindControl("txtID");
Response.Write(txt.Text);
后台中:
总算把 TemplateColumn的值给捞出来了。
严重注意:只有BoundColumn列和自动生成列,才可以通过TableCell.Text属性读取显示的文本。HyperLinkColumn、ButtonColumn、EditCommandColumn都需要将目标控件转换成相应的控件。
比如:
假设DataGrid的第一列声明如下
<asp:HyperLinkColumn DataTextField="au_id" HeaderText="au_id" DataNavigateUrlField="au_id" DataNavigateUrlFormatString="Edit.aspx?id={0}"></asp:HyperLinkColumn>
读取的时候可以用:
//Items[0]表示第一行,Cells[0]表示第一列,Controls[0]表示Cell中的第一个控件(也只有这个控件可以用)
HyperLink link = (HyperLink)DataGrid1.Items[0].Cells[0].Controls[0]);
Response.Write(link.Text);
至于模板列(TemplateColumn),当然也可以通过DataGrid1.Items[i].Cells[j].Controls[n]来获取,然后转换成原来的控件类型再操作,但是还有个更好的办法,就是用FindControl来查找控件。
FindControl是System.Web.UI.Control的方法,可以根据子控件ID来查找子控件
比如:
假设DataGrid的某一列声明如下
<asp:TemplateColumn>
<ItemTemplate>
<asp:TextBox Runat="server" ID="txtID" Text='<%# DataBinder.Eval(Container.DataItem,"au_id") %>'>
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
读取方法:
TextBox txt = (TextBox)DataGrid1.Items[1].FindControl("txtID");
Response.Write(txt.Text);
注意:DataList中是没有Cell的
在修改GBM项目时,实际使用到了。
<ASP:TEMPLATECOLUMN HeaderText="Request ID" SortExpression="Requestid">
<HeaderStyle Width="50px"></HeaderStyle>
<ITEMSTYLE CssClass="Font8pt" HorizontalAlign="Left" Font-Names="Verdana" ></ITEMSTYLE>
<ITEMTEMPLATE>
<a href="#" οnclick="javascript:queryrequest(this)" id='<%# DataBinder.Eval(Container, "DataItem.Requestid")%>'>
<%# DataBinder.Eval(Container, "DataItem.Requestid") %>
</a>
<asp:TextBox ID="txtRequestId" Runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Requestid") %>' Visible=False></asp:TextBox>
</ITEMTEMPLATE>
</ASP:TEMPLATECOLUMN>
后台中:
private string GetSelIDList()
{
try
{
string strSelIDList = "";
foreach(DataGridItem di in this.DataGridItemList.Items)
{
TableCellCollection tcc = di.Cells;
TextBox txt = (TextBox)di.FindControl("txtRequestId");
string b=txt.Text;
if(((CheckBox)di.FindControl("chkSel")).Checked==true)
{
strSelIDList += b + ",";//requestid
}
}
if (strSelIDList.Length > 0)
{
strSelIDList = strSelIDList.Substring(0,strSelIDList.Length - 1);
}
return strSelIDList;
}
catch (Exception ex)
{
throw ex;
}
}
总算把 TemplateColumn的值给捞出来了。
我比较笨笨啦。