如何在网格内找到控制列?

时间:2014-05-13 18:43:38

标签: c# asp.net gridview

在我的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;
} 

但我没有得到专栏。所有专栏都令人满意。

1 个答案:

答案 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;
    }