Выпадающий список ASP.Net в подробном представлении не задан в codebehind - PullRequest
0 голосов
/ 21 июля 2010

У меня есть следующий код в моей кодовой функции Page_Load, который устанавливает выбранное по умолчанию значение раскрывающегося списка в подробном просмотре на основе имени записи, возвращенной из запроса данных SQL.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.Page.Title = "Editing record"

        'Perform dropdown list population operations
        Dim myDDL As DropDownList = DetailsView1.FindControl("reqCategoryDropDown")
        If Page.IsPostBack = False Then

            Dim ticket_ID As String = getDataKey(DetailsView1)
            'Fetch Category ID
            Dim sqlText As String = "SELECT TS_REQCATEGORY FROM USR_ITFAC WHERE (TS_ID = " + ticket_ID + ") "
            Dim reqDataReader As SqlDataReader = GetDataReader(sqlText)
            reqDataReader.Read()

            Dim category_ID As String = reqDataReader(0)

            'Fetch Category name and set as selected value in dropdown list
            sqlText = "SELECT TS_NAME FROM TS_SELECTIONS WHERE (TS_ID = " + category_ID + ") "
            reqDataReader = GetDataReader(sqlText)
            reqDataReader.Read()
            category_Name = reqDataReader(0)
            'myDDL.DataBind()
            myDDL.SelectedValue = category_Name
        End If

    End Sub

Моя проблема в том, что при первой загрузке страницы, даже если я установил выбранное значение для раскрывающегося списка, он не будет отображаться, а вместо этого просто отображает имя по умолчанию в моем раскрывающемся списке. Я пытался связать свой выпадающий список до и после того, как я установил выбранное значение, это закомментировано в приведенном выше примере кода, но это, похоже, ничего не делает.

UPDATE: Я устанавливаю источник данных в веб-форме следующим образом:

DROPDOWNLIST:

<asp:DropDownList DataSourceID="ReqCategoryData" DataTextField="ReqCategory" DataValueField="ReqCategory"
                                ID="reqCategoryDropDown" runat="server" AppendDataBoundItems="true" AutoPostBack="true">                                                            
                            </asp:DropDownList>

Подключается к источнику данных несколькими строками вниз:

<asp:SqlDataSource ID="ReqCategoryData" runat="server" ConnectionString="<%$ ConnectionStrings:TTPRODReportsQuery %>"
        SelectCommand="SELECT TS_NAME AS ReqCategory FROM dbo.TS_SELECTIONS WHERE (TS_FLDID = 5299 AND TS_STATUS = 0) ORDER BY TS_NAME">
        </asp:SqlDataSource>

UPDATE_2: Итак, я реализовал его SQLDataSource программно в коде позади функции Page_Init следующим образом:

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
        DetailsView1.DefaultMode = DetailsViewMode.Edit

        ''Setup DropDownList SqlDataSource
        ddlDataSource.ID = "ReqCategoryData"
        Page.Controls.Add(ddlDataSource)
        ddlDataSource.ConnectionString = ConfigurationManager.ConnectionStrings("TTPRODReportsQuery").ConnectionString
        ddlDataSource.SelectCommand = "SELECT TS_NAME AS ReqCategory FROM dbo.TS_SELECTIONS WHERE (TS_FLDID = 5299 AND TS_STATUS = 0) ORDER BY TS_NAME"
        Dim args As New DataSourceSelectArguments
        ddlDataSource.Select(args)
        ddlDataSource.DataBind()

    End Sub

После чего я попытаюсь установить выбранное значение из выпадающего списка, как указано выше. Страница все еще не устанавливает выбранное значение.

Ответы [ 3 ]

1 голос
/ 21 июля 2010

Возможно, проверьте эти пункты:

  • убедитесь, что вы звоните myDDL.DataSource = reqDataReader или какой-либо другой форме установки источника данных вашего выпадающего списка.
  • убедитесь, что в выпадающем списке правильно установлены DataTextField и DataTextField. Это может быть в коде позади или в разметке.
  • 0-й индекс reqDataReader - вы уверены, что это намеченный порядковый номер для DataValueField?

Возможно, что-то вроде этого:

With myDDL
    .DataTextField = "CategoryName"
    .DataValueField = "CategoryID" ' or perhaps CategoryName as your value.
    .DataSource = reqDataReader
    .DataBind()
    .SelectedValue = category_Name ' Name or ID; depends on what was set as DataValueField
End With

Привязка данных - выделение кода и источники данных разметки

Подумайте о выборе одного стиля привязки вашего выпадающего списка - с выделенным кодом или с разметкой SqlDataSource. Наличие обоих порождает путаницу, в которой побеждает связывание - отстающий код или источник данных. Я думаю, что в данном случае это SqlDataSource.

Подумайте об удалении SqlDataSource из разметки и создайте метод в программном коде, единственной целью которого является создание привязки данных. Это единственное место, где должно происходить связывание. Если вам когда-нибудь понадобится отследить дефект или усовершенствовать свою логику, это единственное место для посещения.

Private Sub BindMyDropDown(Optional ByVal selectedValue as String)
    With myDDL
        .DataTextField = "CategoryName"
        .DataValueField = "CategoryID" ' or perhaps CategoryName as your value.
        .DataSource = LoadTicketReqCategory(TicketID)
        .DataBind()
        .SelectedValue = selectedValue ' Name or ID; depends on what was set as  DataValueField
    End With

End Sub

Из вашего Page_Load() проверьте IsPostBack() и вызывайте этот метод, когда вы не отправляете ответ.

0 голосов
/ 21 июля 2010

Возможно, проблема в том, что вы присваиваете переменную myDDL вне проверки обратной передачи.

    Dim myDDL As DropDownList = DetailsView1.FindControl("reqCategoryDropDown")
    If Page.IsPostBack = False Then

Должно быть

    If Page.IsPostBack = False Then
        Dim myDDL As DropDownList = DetailsView1.FindControl("reqCategoryDropDown")
0 голосов
/ 21 июля 2010

myDDL.ClearSelection item = myDDL.Items.FindByValue (category_Name) item.selected = true

- Вы также можете попробовать установить SelectedIndex на 2, например, чтобы проверить это таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...