无法从Gridview获取值

时间:2014-03-16 20:28:42

标签: c# asp.net gridview

您好我有一个gridview Naming FolderGridView。在GridView中有一个模板字段,在模板字段中我指定了一个Linkbutton。现在我无法从我的codeBehind中的linkBut​​ton获取值。

<asp:GridView ID="FolderGridView" runat="server"
        AutoGenerateColumns = "False" 
        AllowPaging ="True"  OnPageIndexChanging ="FolderGridView_PageIndexChanging" CellPadding="4" ForeColor="#333333" GridLines="None" 
        >
            <AlternatingRowStyle BackColor="White" />
        <Columns>

            <asp:TemplateField HeaderText="Select">
                <ItemTemplate>
                    <asp:CheckBox ID="FolderCheckBox" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>



            <asp:TemplateField HeaderText="Folder Name">
                <ItemTemplate>
                    <asp:LinkButton Text='<%#Eval("File Name")%>' PostBackUrl='<%# String.Format("InsideFolder.aspx?FolderName={0}",  Eval("File Name")   ) %>' runat="server" />
                </ItemTemplate>
            </asp:TemplateField>

        </Columns>
</asp:GridView>

我的代码背后

for (int i = 0; i < FolderGridView.Rows.Count; i++)
    {
        CheckBox chk = (CheckBox)FolderGridView.Rows[i].FindControl("FolderCheckBox");
        if (chk.Checked == true)
        {
            string FileName = (string)FolderGridView.Rows[i].Cells[1].Text.ToString();

        }
    }

我已经调试了部分代码。在FileName中,当我到达这一点时,我得到一个空字符串。那么如何从模板字段中获取值?

2 个答案:

答案 0 :(得分:1)

单元格中的文本位于LinkBut​​ton控件内,因此首先必须获取GridView行的LinkBut​​ton控件,然后才能访问Text属性。以下代码适用于您的情况:

for (int i = 0; i < FolderGridView.Rows.Count; i++){
    CheckBox chk = (CheckBox)FolderGridView.Rows[i].FindControl("FolderCheckBox");
    if (chk.Checked == true){
       foreach (Control ctl in FolderGridView.Rows(i).Cells(1).Controls) {
           if (ctl is LinkButton) {
           string filename = ((LinkButton)ctl).Text;
           }
    }
}

答案 1 :(得分:0)

替换链接按钮

编辑: 对于LinkBut​​ton:

<asp:LinkButton ID="LinkButton1"  AutoPostBack="True"  OnClick="someMethod" Text='<%#Eval("File Name")%>' PostBackUrl='<%# String.Format("InsideFolder.aspx?FolderName={0}",  Eval("File Name")   ) %>' runat="server" />

和代码背后

protected  void someMethod(object sender, EventArgs e)
        {
            foreach (GridViewRow item in GridView5.Rows)
            {
                CheckBox chk = (CheckBox)item.FindControl("FolderCheckBox");
                if (chk.Checked == true)
                {

                    string probname = chk.Text;
                }

            }
        }