2

Entity Data Model の複数のテーブルからデータを受け取る DataGrid があります。EditCommandColumn を使用して、データの編集と、データベースのストアド プロシージャからの関数インポートの列にバインドされた TemplateColumns を提供しました。

asp:DataGrid を作成するための .aspx コードの一部を次に示します。

<asp:UpdatePanel ID="gridUpdate" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <div style="vertical-align: top; height:250px; overflow:auto; width:1800px;">
            <asp:DataGrid ID="dgdEditQ" runat="server" AllowPaging="True" AllowSorting="True" 
                    BackColor="AntiqueWhite" BorderColor="Green" BorderStyle="Ridge" 
                    CellPadding="10" Font-Bold="True"
                    Font-Size="Large" Width="1800px" Height="250px" OnEditCommand="dgdEditQ_Edit"
                    OnCancelCommand="dgdEditQ_Cancel" OnUpdateCommand="dgdEditQ_Update"
                    CellSpacing="10" ViewStateMode="Disabled" ItemStyle-Wrap="False" 
                    ItemStyle-Width="100" AutoGenerateColumns="False">

                <AlternatingItemStyle />
                <Columns>
                    <asp:EditCommandColumn
                            EditText="Edit"
                            CancelText="Cancel"
                            UpdateText="Update"
                            HeaderText="Edit item"
                            ButtonType="LinkButton">
                    </asp:EditCommandColumn>

                    <asp:TemplateColumn Visible="true">
                        <HeaderTemplate>
                            <b> Quote Number </b>
                        </HeaderTemplate>   
                        <ItemTemplate>
                            <asp:Label  runat="server" Text='<%#Eval("QuoteNumber") %>'></asp:Label>
                        </ItemTemplate>                                                          
                    </asp:TemplateColumn>

                    <asp:TemplateColumn Visible="false">
                        <HeaderTemplate>
                            <b> Name </b>
                        </HeaderTemplate>   
                        <ItemTemplate>
                            <asp:Label ID="lblEdN"  runat="server" Text='<%#Eval("Name") %>'></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox runat="server" Text='<%#Eval("Name") %>' ID="txbEdName" MaxLength="50"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="rfvName" runat="server" ControlToValidate="txbEdName" ErrorMessage="The name of the quote is required."></asp:RequiredFieldValidator>
                        </EditItemTemplate>                                                          
                    </asp:TemplateColumn>

                    <asp:TemplateColumn Visible="false">
                    <HeaderTemplate>
                        <b> Street </b>
                    </HeaderTemplate>   
                    <ItemTemplate>
                        <asp:Label ID="lblEdSt"  runat="server" Text='<%#Eval("Street") %>'></asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox runat="server" Text='<%#Eval("Street") %>' ID="txbEdStreet" MaxLength="50"></asp:TextBox>
                    </EditItemTemplate>                                                          
                    </asp:TemplateColumn>

                    <asp:TemplateColumn Visible="false">
                    <HeaderTemplate>
                        <b> City & State </b>
                    </HeaderTemplate>   
                    <ItemTemplate>
                        <asp:Label ID="lblEdCS"  runat="server" Text='<%#Eval("CityState") %>'></asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox runat="server" Text='<%#Eval("CityState") %>' ID="txbEdCS" MaxLength="50"></asp:TextBox>
                    </EditItemTemplate>                                                         
                    </asp:TemplateColumn>

                </Columns>
                <SelectedItemStyle />
            </asp:DataGrid>
        </div>
    </ContentTemplate>
</asp:UpdatePanel>     

毎回機能する EditCommandColumn で [編集] をクリックすると、[キャンセル] も同様に機能しますが、[更新] ボタンをクリックしても、コード ビハインドで onclick イベントハンドラーがトリガーされることはありません。

protected void dgdEditQ_Update(Object sender, DataGridCommandEventArgs e)
    {
        DataGridItem dgi = dgdEditQ.SelectedItem;
        TextBox[] myBoxes = new TextBox[26];
        string[] myParams = new string[26];

        myBoxes[0] = (TextBox)dgi.FindControl("Quote Number");
        myBoxes[1] = (TextBox)dgi.FindControl("Name");
        myBoxes[2] = (TextBox)dgi.FindControl("Street");
        myBoxes[3] = (TextBox)dgi.FindControl("City & State");
        myBoxes[4] = (TextBox)dgi.FindControl("Type of Quote");
        myBoxes[5] = (TextBox)dgi.FindControl("List Provided By");
        myBoxes[6] = (TextBox)dgi.FindControl("Estimator");
        myBoxes[7] = (TextBox)dgi.FindControl("Date Received");
        myBoxes[8] = (TextBox)dgi.FindControl("Date Due");
        myBoxes[9] = (TextBox)dgi.FindControl("Date of Plans");
        myBoxes[10] = (TextBox)dgi.FindControl("Date of Revision");
        myBoxes[11] = (TextBox)dgi.FindControl("Revision #");
        myBoxes[12] = (TextBox)dgi.FindControl("Plan Name");
        myBoxes[13] = (TextBox)dgi.FindControl("Customer");
        myBoxes[14] = (TextBox)dgi.FindControl("Amount");
        myBoxes[15] = (TextBox)dgi.FindControl("Quote Status");
        myBoxes[16] = (TextBox)dgi.FindControl("Excel File");
        myBoxes[17] = (TextBox)dgi.FindControl("Folder Location");
        myBoxes[18] = (TextBox)dgi.FindControl("Architect");
        myBoxes[19] = (TextBox)dgi.FindControl("Architectural Firm");
        myBoxes[20] = (TextBox)dgi.FindControl("Architect's Phone");
        myBoxes[21] = (TextBox)dgi.FindControl("Architect's Fax");
        myBoxes[22] = (TextBox)dgi.FindControl("Engineer");
        myBoxes[23] = (TextBox)dgi.FindControl("Engineering Firm");
        myBoxes[24] = (TextBox)dgi.FindControl("Engineer's Phone");
        myBoxes[25] = (TextBox)dgi.FindControl("Engineer's Fax");

        for (int j = 0; j < 26; j++)
        {
            myParams[j] = myBoxes[j].Text;
        }
    }

私はかなり、ASP.NET を初めて使用しますが、これまでに行ったすべての調査では、[更新] ボタンをクリックしたときに Update イベントが発生しない理由についての答えが得られませんでした。

4

2 に答える 2

0

私はあなたの問題を再現し、それが削除されていることを発見しました: ViewStateMode="Disabled"

于 2013-09-03T17:50:43.010 に答える