別の GridView 内の GridView で値を編集することに頭を悩ませようとしています。最初の GridView で値を編集できますが、子 GridView で [編集] をクリックすると、ポストバック以外は何も起こりません。
私の GridView 構造は次のとおりです。
<asp:GridView ID="gwProperties" runat="server" Width="100%"
onrowediting="gwProperties_RowEditing" AutoGenerateColumns="False"
DataKeyNames="Name,IsActive"
onrowcancelingedit="gwProperties_RowCancelingEdit"
onrowdeleting="gwProperties_RowDeleting"
ShowFooter="True" onrowupdating="gwProperties_RowUpdating">
<FooterStyle BackColor="#20334F" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="green" Font-Bold="True" ForeColor="White" />
<Columns>
<asp:CommandField ShowEditButton="true" EditText="Ret" UpdateText="Gem" CancelText="Annuller" />
<asp:BoundField DataField="Name" HeaderText="Navn" SortExpression="Name" />
<asp:TemplateField HeaderText="Aktiv" SortExpression="IsActive" Visible="true">
<ItemTemplate>
<asp:Label runat="server" ID="Label2" Text='<%# (Boolean.Parse(Eval("IsActive").ToString())) ? "Aktiv" : "Inaktiv" %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox runat="server" ID="cbIsPropertyActive" Checked='<%# Bind("IsActive") %>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
</td>
</tr>
<tr>
<td colspan="100%">
<asp:GridView DataKeyNames="StreetName,Zip,City,Country" runat="server" ID="gwAddresses" Width="100%" AutoGenerateColumns="false" DataSource='<%#Eval("Addresses") %>' OnRowEditing="gwAddresses_RowEditing">
<Columns>
<asp:TemplateField HeaderText="Vejnavn">
<ItemTemplate>
<asp:Label runat="server" ID="lblStreetName" Text='<%# Bind("StreetName") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox runat="server" ID="txtStreetName" Text='<%# Bind("StreetName") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="true" EditText="Ret" UpdateText="Gem" CancelText="Annuller" />
<asp:BoundField DataField="Zip" HeaderText="Postnummer" SortExpression="Zip" />
<asp:BoundField DataField="City" HeaderText="By" SortExpression="City" />
<asp:BoundField DataField="Country" HeaderText="Land" SortExpression="Country" />
<asp:TemplateField>
<ItemTemplate>
</td>
</tr>
<tr>
<td colspan="100%">
<asp:GridView runat="server" ID="gwStreetNumbers" Width="100%" AutoGenerateColumns="false" DataSource='<%#Eval("StreetNumbers") %>' OnRowEditing="gwAddresses_RowEditing">
<Columns>
<asp:BoundField DataField="Number" HeaderText="Nummer" SortExpression="Number" />
<asp:BoundField DataField="Letter" HeaderText="Bogstav" SortExpression="Letter" />
<asp:TemplateField>
<ItemTemplate>
</td>
</tr>
<tr>
<td colspan="100%">
<asp:GridView runat="server" ID="gwPrivateLeases" Width="100%" AutoGenerateColumns="false" DataSource='<%#Eval("LeaseTypes.PrivateLeases") %>' OnRowEditing="gwAddresses_RowEditing">
<Columns>
<asp:TemplateField HeaderText="Aktiv">
<ItemTemplate>
<asp:Label runat="server" ID="lblIsLeaseActive" Text='<%# (Boolean.Parse(Eval("IsActive").ToString())) ? "Aktiv" : "Inaktiv" %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="TakeoverDate" HeaderText="Overtagelsesdato" SortExpression="TakeoverDate" />
<asp:BoundField DataField="Floor" HeaderText="Sal" SortExpression="Floor" />
<asp:BoundField DataField="Side" HeaderText="Side" SortExpression="Side" />
<asp:BoundField DataField="Regulating" HeaderText="Regulering" />
<asp:HyperLinkField DataNavigateUrlFields="Prospect" HeaderText="Prospekt" />
<asp:HyperLinkField DataNavigateUrlFields="FloorPlanDrawing" HeaderText="Plantegning" />
<asp:BoundField DataField="LeasingPeriod" HeaderText="Lejeperiode" />
<asp:BoundField DataField="SquareMetre" HeaderText="Kvadratmeter" />
<asp:BoundField DataField="Rent" HeaderText="Husleje" />
<asp:BoundField DataField="NumberOfRooms" HeaderText="Antal værelser" />
<asp:BoundField DataField="ACConsumption" HeaderText="A/C forbrug" />
<asp:BoundField DataField="PaymentInAdvance" HeaderText="Forudbetalt leje" />
<asp:BoundField DataField="Termination" HeaderText="Opsigelse (antal måneder)" />
<asp:TemplateField HeaderText="Møbleret">
<ItemTemplate>
<asp:Label runat="server" ID="lblIsFurnished" Text='<%# (Boolean.Parse(Eval("IsFurnished").ToString())) ? "Ja" : "Nej" %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Husdyr">
<ItemTemplate>
<asp:Label runat="server" ID="lblIsFurnished" Text='<%# (Boolean.Parse(Eval("IsAnimalsAllowed").ToString())) ? "Ja" : "Nej" %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Altan">
<ItemTemplate>
<asp:Label runat="server" ID="lblIsFurnished" Text='<%# (Boolean.Parse(Eval("HasBalcony").ToString())) ? "Ja" : "Nej" %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Delevenlig">
<ItemTemplate>
<asp:Label runat="server" ID="lblIsFurnished" Text='<%# (Boolean.Parse(Eval("CanBeShared").ToString())) ? "Ja" : "Nej" %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="TypeOfRental" HeaderText="Lejemålstype" />
</Columns>
</asp:GridView>
</td>
</tr>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
</td>
</tr>
<tr>
<td colspan="100%">
<asp:GridView runat="server" ID="gwBusinessLeases" Width="100%" AutoGenerateColumns="false" DataSource='<%#Eval("LeaseTypes.BusinessLeases") %>' OnRowEditing="gwAddresses_RowEditing">
<Columns>
<asp:TemplateField HeaderText="Aktiv">
<ItemTemplate>
<asp:Label runat="server" ID="lblIsLeaseActive" Text='<%# (Boolean.Parse(Eval("IsActive").ToString())) ? "Aktiv" : "Inaktiv" %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="TakeoverDate" HeaderText="Overtagelsesdato" SortExpression="TakeoverDate" />
<asp:BoundField DataField="Floor" HeaderText="Sal" SortExpression="Floor" />
<asp:BoundField DataField="Side" HeaderText="Side" SortExpression="Side" />
<asp:BoundField DataField="Regulating" HeaderText="Regulering" />
<asp:HyperLinkField DataNavigateUrlFields="Prospect" HeaderText="Prospekt" />
<asp:HyperLinkField DataNavigateUrlFields="FloorPlanDrawing" HeaderText="Plantegning" />
<asp:BoundField DataField="MinimumSquareMetre" HeaderText="Kvadratmeter min." />
<asp:BoundField DataField="MaximumSquareMetre" HeaderText="Kvadratmeter max." />
<asp:BoundField DataField="YearlyRentPerSquareMetre" HeaderText="Årlig leje pr. m2" />
<asp:BoundField DataField="ACYearlyOperationalCostPerSquareMetre" HeaderText="Årlig drift pr. m2" />
<asp:BoundField DataField="Deposit" HeaderText="Depositum" />
<asp:BoundField DataField="MonthsOfPaymentInAdvance" HeaderText="Forudbetalt leje (antal måneder)" />
<asp:BoundField DataField="VATAgreements" HeaderText="Moms" />
<asp:BoundField DataField="MonthsOfTermOfNotice" HeaderText="Opsigelsesvarsel" />
<asp:BoundField DataField="TypeOfRental" HeaderText="Lejemålstype" />
</Columns>
</asp:GridView>
</td>
</tr>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</td>
</tr>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</td>
</tr>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
テキストの壁で申し訳ありません-かなり大規模です;-)実際には4つのネストされたグリッドビューですが、最初のネストされたグリッドビューを編集できるようになったら、他の子グリッドビューに対してまったく同じことを行うことができます.
.cs ファイルで次のようなことを試しました。
protected void gwAddresses_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView gwAddresses = (GridView)sender;
gwAddresses.EditIndex = e.NewEditIndex;
FillGridView();
}
しかし、それは何もしません。これはまったく可能ですか?これに関するいくつかの優れた記事を見つけましたが、それを機能させることができません:-/
これに間違ったコントロールを使用しているという奇妙な感覚があります。
私のオブジェクト構造は次のとおりです。
- Property
- List<Address>
- Address object: List<StreetNumber>
- StreetNumber object: List<LeaseTypes>
- LeseTypes object: List<PrivateLease> and List<BusinessLease>
したがって、基本的には、ASP.NET ソリューションのフロントエンドでバインドして編集可能にする必要がある 5 段階の深さの構造です。
これは私に深刻な頭痛の種を与えているので、誰かがこれを達成する方法について小さなヒントを持っていれば、私はこれまでになく素晴らしいことです!
前もって感謝します!
- ボー