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 イベントが発生しない理由についての答えが得られませんでした。