GridViewRow没有返回正确的单元格

时间:2012-12-02 19:33:32

标签: c# asp.net .net gridview datagridviewrow

所以我的一个页面出现了这个问题,它基本上为指定的学生列出了一堆评论。评论应该是可编辑的,但我在获取行内容方面遇到问题(因此我可以在TextBox中显示评论内容并允许编辑)。

问题是每当我从GridViewRow访问GridView时都会这样: this.CommentList.Rows[e.NewEditIndex] 它返回了一组单元格,但每当我尝试访问一个单元格时:row.Cells[0].Text(其中row是选定的GridViewRow对象)它不会返回任何值。

这是我的.aspx代码:

<asp:GridView ID="CommentList" runat="server" AutoGenerateColumns="False" CellPadding="5"
    ShowHeader="false" Width="100%" DataKeyNames="CommentId" OnRowDeleting="CommentList_RowDeleting"
    OnRowCancelingEdit="CommentList_RowCancelingEdit" OnRowEditing="CommentList_RowEditing">
    <Columns>
        <asp:TemplateField HeaderText="Student ID">
            <ItemTemplate>
                <b>Author:</b>
                <%# ((Comment)Container.DataItem).Author.Name %>
                <br />
                <b>Date:</b>
                <%# ((Comment)Container.DataItem).Created %>
                <hr style="border-top: solid 1px black" />
                <div style="text-align: center;">
                    <asp:Panel ID="OptionsPanel" runat="server">
                        <asp:LinkButton ID="DeleteLinkButton" CommandName="Delete" runat="server" OnClientClick="return confirm('Are you sure you want to delete this comment?');">Delete</asp:LinkButton>
                        |
                        <asp:LinkButton ID="EditLinkButton" runat="server" CommandName="Edit">Edit</asp:LinkButton>
                    </asp:Panel>
                    <asp:Panel ID="EditOptionsPanel" runat="server" Visible="false">
                        <asp:LinkButton ID="CancelEditLinkButton" runat="server" CommandName="Cancel">Cancel</asp:LinkButton>
                    </asp:Panel>
                </div>
            </ItemTemplate>
            <ItemStyle CssClass="topLeftJustify" Width="200px" />
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Name">
            <ItemTemplate>
                <asp:Panel ID="ViewCommentPanel" runat="server">
                    <%# ((Comment)Container.DataItem).Content%>
                </asp:Panel>
                <asp:Panel ID="EditCommentPanel" runat="server" Visible="false">
                    <asp:TextBox ID="Comment" runat="server" CssClass="textEntry" TextMode="MultiLine"
                        Width="100%" Height="100px"></asp:TextBox>
                </asp:Panel>
            </ItemTemplate>
            <ItemStyle CssClass="topLeftJustify" />
        </asp:TemplateField>
    </Columns>
</asp:GridView>

这是我的.aspx.cs代码(与上面的代码有关):

    protected void CommentList_RowEditing(object sender, GridViewEditEventArgs e)
    {
        try
        {
            GridViewRow row = this.CommentList.Rows[e.NewEditIndex];
            ((Panel)row.FindControl("OptionsPanel")).Visible = false;
            ((Panel)row.FindControl("EditOptionsPanel")).Visible = true;
            ((Panel)row.FindControl("ViewCommentPanel")).Visible = false;
            ((Panel)row.FindControl("EditCommentPanel")).Visible = true;

            // problem is with this line. it doesn't show the contents of the "comment"
            ((TextBox)row.FindControl("Comment")).Text = row.Cells[0].Text;
        }
        catch (Exception ex)
        {
            this.Messages.ChangeMessage(ex.Message, MessageType.Error);
        }
    }

1 个答案:

答案 0 :(得分:2)

使用TemplateField时,无法使用e.Row.Cells[index].Text访问单元格的控制文本。我只需在面板中添加Label

但你也可以这样试试:

Panel ViewCommentPanel = (Panel) e.Row.FindControl("ViewCommentPanel");
LiteralControl objPanelText = ViewCommentPanel.Controls[0] as LiteralControl;
TextBox Comment = (TextBox) row.FindControl("Comment");
Comment.Text = objPanelText.Text;