在我的asp网格中,很少有列是模板字段,很少列是从DataTable绑定的。 我设置 Autogenearte = true 。所以总计 columns =静态列+ DataTable列 。我正在重新排序行创建事件的列。
我的问题是在静态列中我需要根据某些列禁用某些列 条件。我需要在静态模板字段中识别控件列号。所以我可以设置 e.Row.Cells [7] .CssClass =" hiddencol&#34 ;; 但是我如何才能得到列
我试过
int colNo=0;
for(int count=0;count<e.Row.Cells.count;count++)
{
Button btn=(Button) e.Row.Cells[Count].FindControl("txtCol");
if(btn!=null)
colNo=count;
}
但我没有得到专栏。所有专栏都令人满意。
答案 0 :(得分:0)
如果我理解你的意图,那么如下所示。它适用于我的测试。
网格
<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="Static Col 1"></asp:TemplateField>
<asp:TemplateField HeaderText="Static Col 2" >
<ItemTemplate>
<asp:Button runat="server" ID="btnTest" Text="Hide Me"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
背后的代码
protected void Page_Load(object sender, EventArgs e)
{
GridView1.DataSource = GetData();
GridView1.DataBind();
}
private DataTable GetData()
{
// get some data and return it
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (HideCell(e.Row.RowIndex))
{
var cell = e.Row.Cells.Cast<TableCell>().FirstOrDefault(c => c.FindControl("btnTest") != null);
if (cell != null)
{
cell.CssClass = "hidden";
}
}
}
}
private bool HideCell(int rowNum)
{
return rowNum%2 == 0;
}