1

正常に動作するグリッドビューがありますが、「編集をクリックしたときに、オブジェクトがオブジェクトのインスタンスに設定されていません。

編集モードのときにグリッドビューのラベルがnullであり、これが問題の原因であると信じていましたが、これを解決する方法がわかりません。

              <asp:BoundField DataField="Received" HeaderText="Received" SortExpression="Received"
                        ReadOnly="true">
                        <ItemStyle HorizontalAlign="Center" />
                    </asp:BoundField>
                    <asp:TemplateField HeaderText="Complete" SortExpression="Complete">                            
                        <ItemTemplate>
                            <asp:Label ID="lblComplete" runat="server" Text='<%# Bind("Complete") %>'></asp:Label>
                        </ItemTemplate>
                        <ItemStyle HorizontalAlign="Center" />
                    </asp:TemplateField>
                    <asp:BoundField DataField="TransTime" HeaderText="Trans. Time" SortExpression="TransTime"
                        ReadOnly="true">
                        <ItemStyle HorizontalAlign="Center" />
                    </asp:BoundField>
                    <asp:TemplateField ShowHeader="False">
                        <ItemTemplate>
                            <asp:LinkButton ID="lbClose" runat="server" CausesValidation="False" CommandName="CloseClicked" Text ="Close"
                                OnClick="CloseClick_Click">Close</asp:LinkButton>
                            <asp:LinkButton ID="lbEdit" runat="server" CausesValidation="False" CommandName="EditRow"  Text =""
                                OnClick="Edit_Click" CommandArgument='<%# Eval("TicketId")%>'>Edit</asp:LinkButton>
                            <asp:LinkButton ID="lbDelete" runat="server" CausesValidation="False" CommandName="DeleteRow"  Text =""
                                OnClick="Delete_Click">Delete </asp:LinkButton>


                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:LinkButton ID="lbUpdate" runat="server" CausesValidation="True" CommandName="UpdateRow"
                                ForeColor="White" Text="Update" CommandArgument='<%# Eval("TicketId")%>'></asp:LinkButton>
                            <asp:LinkButton ID="lbCancel" runat="server" CausesValidation="False" CommandName="CancelUpdate"
                                ForeColor="White" CommandArgument='<%# Eval("TicketId")%>' Text="Cancel"></asp:LinkButton>
                        </EditItemTemplate>
                        <FooterStyle HorizontalAlign="Center" />
                        <ItemStyle HorizontalAlign="Center" />
                    </asp:TemplateField>
                </Columns>
                <EditRowStyle BackColor="#999999" />
                 />

            </asp:GridView>

行コマンド

    protected void gvData_RowCommand(object sender, GridViewCommandEventArgs e)
    {
           if (e.CommandName == "EditRow")
           {
               //This enables the EditTemplate
               int rowindex = ((GridViewRow)             ((LinkButton)e.CommandSource).NamingContainer).RowIndex;
                gvData.EditIndex = rowindex; //Enables the edit row in gridview                      
            }
    }

lbClos​​e.Enabled でエラーが発生します

  protected void gvData_RowDataBound(object sender, GridViewRowEventArgs e)
 {
e.Row.Cells[0].Visible = false; 

if (e.Row.RowType == DataControlRowType.DataRow)
{
    LinkButton lbClose = (LinkButton)e.Row.Cells[5].FindControl("lbClose");
    LinkButton lbEdit = (LinkButton)e.Row.Cells[5].FindControl("lbEdit");
    LinkButton lbDelete = (LinkButton)e.Row.Cells[5].FindControl("lbDelete");


    var lblTrans = (Label)e.Row.FindControl("lblTrans");
    var lblComplete = (Label)e.Row.FindControl("lblComplete");               


    if (e.Row.Cells[3].Text == "")
    {
        lbClose.Enabled = true; //Error Here
        lbEdit.Enabled = true;
        lbDelete.Enabled = true;
    }
    else
    {
        lbClose.Enabled = false;
    }                       
}
}
4

2 に答える 2

1

編集モードのときにグリッドビューのラベルがnullであり、これが問題の原因であると信じていました...

EditModeOK、この行に入ると問題が発生するということですね。EditModeおっしゃるとおり、これらのコントロールは の一部であるため、 には存在しませんItemTemplate。だからこれをしてください:

LinkButton lbClose = (LinkButton)e.Row.Cells[5].FindControl("lbClose");
if (lbClose == null) { return; }

コントロールが見つからない場合は、行の状態を知っているので、以下のステートメントは重要ではありません。

于 2013-08-19T20:32:00.323 に答える
0

これらのコントロールは、ItemTemplate の一部であるため、EditMode には存在しません。コンディションを変えるだけ!

if (e.Row.RowType == DataControlRowType.DataRow & gvData.EditIndex != e.Row.RowIndex)
于 2013-08-19T20:48:47.917 に答える