ASP.NETページのLinqDataSourceにバインドされているFormView(ページングが有効になっている)があります。私はいくつかの非常に奇妙な行動を経験していて、なぜそれが起こっているのか理解できません。この質問を簡単にするために、この動作を示すために不要なコード(他のFormViewテンプレートなど)を削除しました。
私のFormViewには、3つのフィールド、2つのテキストボックスと1つのDropDownListがあります。DropDownListは、ページ上の別のLinqDataSourceにバインドされ、外部キー値を含みます。FormViewのLinqDataSourceに含まれるレコードが1つだけで、それを更新しようとすると、DropDownListの選択された値が常に空であるため、どの値を選択しても更新は失敗します。FormViewのLinqDataSourceに2つ以上のレコードが含まれている場合、正常に機能します。
これが本当に奇妙なことです。FormViewのPagerSettingsが原因で、更新は実際には失敗しています。デフォルトのポケットベル設定だけを使用すると、すべて問題ありません。PagerModeをに変更するNextPreviousFirstLast
と、更新が失敗します。
これが私のFormViewとそのデータソースです:
<asp:FormView ID="fvData" runat="server" AllowPaging="True"
DataKeyNames="ID" DataSourceID="ldsData" DefaultMode="Edit">
<EditItemTemplate>
<table class="pad5">
<tr>
<td class="field-name">AREA:</td>
<td>
<asp:DropDownList ID="cboAREA" runat="server" DataTextField="AREA_NAME"
DataValueField="AREA1" SelectedValue='<%# Bind("AREA") %>' DataSourceID="ldsAreas" />
</td>
</tr>
<tr>
<td class="field-name">LOOP:</td>
<td><asp:TextBox ID="txtLOOP" runat="server" Text='<%# Bind("LOOP") %>' /></td>
</tr>
<tr>
<td class="field-name">LOOP DESCRIPTION:</td>
<td><asp:TextBox ID="txtLOOP_DESCRIPTION" runat="server"
Text='<%# Bind("LOOP_DESCRIPTION") %>' style="width: 600px" /></td>
</tr>
</table>
<asp:Button ID="btnUpdate" runat="server" Text="Update" CommandName="Update" CausesValidation="True" />
<asp:Button ID="btnCancel" runat="server" Text="Cancel" CommandName="Cancel" CausesValidation="False" />
</EditItemTemplate>
<PagerSettings Mode="NextPreviousFirstLast"
FirstPageText="&lt;&lt; First" LastPageText="Last &gt;&gt;"
NextPageText="Next &gt;" PreviousPageText="&lt; Prev"
Position="TopAndBottom" />
<PagerStyle CssClass="pager" />
</asp:FormView>
<asp:LinqDataSource ID="ldsData" runat="server"
ContextTypeName="E_and_I.EAndIDataDataContext" EnableDelete="True"
EnableInsert="True" EnableUpdate="True" EntityTypeName=""
TableName="INSTRUMENT_LOOP_DESCRIPTIONs" onselecting="ldsData_Selecting" OrderBy="ID ASC" >
</asp:LinqDataSource>
<asp:LinqDataSource ID="ldsAreas" runat="server"
ContextTypeName="E_and_I.EAndIDataDataContext" EntityTypeName=""
TableName="AREAs" onselecting="ldsAreas_Selecting">
</asp:LinqDataSource>
そして、これが私のLinqDataSourceの両方のSelecting
イベントです。
EAndIDataDataContext db = new EAndIDataDataContext();
protected void ldsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
e.Result = db.INSTRUMENT_LOOP_DESCRIPTIONs.Take(1); // we only want one record for testing
}
protected void ldsAreas_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
e.Result = db.AREAs.OrderBy(a => a.AREA1).Select(a => new { AREA1 = a.AREA1, AREA_NAME = "(" + a.AREA1 + ") " + a.AREA_NAME });
}
私はこれらの行に問題をたどりました:
<PagerSettings Mode="NextPreviousFirstLast"
FirstPageText="&lt;&lt; First" LastPageText="Last &gt;&gt;"
NextPageText="Next &gt;" PreviousPageText="&lt; Prev"
Position="TopAndBottom" />
上記のPagerSettings
要素を削除するとすぐに、FormViewはレコードを正常に更新します。ポケットベルの設定がこれと関係がある理由を誰かが知っていますか?.NETFramework4.0を使用しています。