EditItemTemplate内のグリッドビュー内にddlをバインドしています。値はバインドされますが、インデックスは1ステップずつ増加します。私は少し浮気を試みました、そしてそれは助けました、しかしそれは2番目の問題を明らかにしました。
<asp:DropDownList ID="ddl_GetLists"
AppendDataBoundItems="true"
DataSourceID="sourceListData"
DataValueField="PK_dn_ID"
DataTextField="fld_dn_name"
SelectedIndex='<%#Eval("listID")-1 %>'
runat="server" />
1ではなく0から始まる配列のように扱われていると想定しています。2番目の問題は、「-1」を適用すると、インデックスがIDではなく値として解釈されているように見えることです。
PK
1 Not Assigned
2 Test List One
3 Test List Two
5 Test List Three
7 Test List Four
NULL NULL
レコードのPKが2の場合、「テストリスト1」と表示され、PK3は「テストリスト2」と表示されます。問題ない。PKが5に達すると、「テストリスト4」と表示され、7は1または「未割り当て」にキックバックします。
<EditItemTemplate>
<div class="gridName">
<asp:TextBox ID="txtFirstName" Text='<%#Eval("firstName") %>' runat="server" Width="95" />
</div>
<div class="gridName">
<asp:TextBox ID="txtLastName" Text='<%#Eval("lastName") %>' runat="server" Width="95" />
</div>
<div class="gridEmail">
<asp:TextBox ID="txtEmail" Text='<%#Eval("email") %>' runat="server" Width="245" />
</div>
<div class="gridName">
<asp:DropDownList ID="ddl_GetLists"
AppendDataBoundItems="true"
DataSourceID="sourceListData"
DataValueField="PK_dn_ID"
DataTextField="fld_dn_name"
SelectedIndex='<%#Bind("listID")-1 %>'
runat="server" />
</div>
</EditItemTemplate>
Protected Sub usersGrid_RowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs)
usersGrid.EditIndex = e.NewEditIndex
BindData()
End Sub
Protected Sub usersGrid_RowDeleting(ByVal sender As Object, ByVal e As GridViewDeleteEventArgs)
Dim userID As Integer = DirectCast(usersGrid.DataKeys(e.RowIndex).Value, Integer)
usersGrid_Delete(userID)
BindData()
End Sub
Protected Sub BindData()
Dim conn As New SqlConnection(connectionString)
Dim ad As New SqlDataAdapter("MAINT_DIST_GET_USERS", conn)
Dim ds As New DataSet()
ad.Fill(ds)
usersGrid.DataSource = ds
usersGrid.DataBind()
Dim al As New SqlDataAdapter("MAINT_DIST_GET_LISTS", conn)
Dim dl As New DataSet()
al.Fill(dl)
listGrid.DataSource = dl
listGrid.DataBind()
End Sub