Почему DropDownList в Gridview увеличивает значение? - PullRequest
0 голосов
/ 23 ноября 2011

Я связываю ddl внутри gridview внутри EditItemTemplate. Значения связываются, но индекс увеличивается на шаг. Я попытался немного обмануть, и это помогло, но выявило вторую проблему.

<asp:DropDownList ID="ddl_GetLists"
                    AppendDataBoundItems="true"
                    DataSourceID="sourceListData" 
                    DataValueField="PK_dn_ID" 
                    DataTextField="fld_dn_name"
                    SelectedIndex='<%#Eval("listID")-1 %>'
                    runat="server" />

Я предполагаю, что он обрабатывается как массив, начиная с 0, а не с 1. Вторая проблема заключается в том, что при применении «-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, она читается как «Список тестов один», PK 3 - «Список тестов два». Нет проблем. Когда ПК нажимает 5, на нем отображается «Тестовый список четыре», а 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

1 Ответ

0 голосов
/ 23 ноября 2011

Хорошо, ошибка новичка, извините.Необходимо использовать SelectedValue, а не SelectedIndex.

...