1

そのため、私のページの 1 つでこの問題が発生しました。このページは基本的に、特定の学生に対する一連のコメントを一覧表示しています。コメントは編集可能であるはずですが、行の内容を取得するのに問題があります (したがって、コメントの内容を表示しTextBoxて編集できるようにすることができます)。

問題は、次GridViewRowGridViewよう にアクセスするたびにthis.CommentList.Rows[e.NewEditIndex] 、セルのコレクションを返しますが、次のようにセルにアクセスしようとするたびに、row.Cells[0].Text(行は選択された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);
        }
    }
4

1 に答える 1