Set dropdownlist ausgewählt Zeitwert beim erstmaligen laden der Seite

Ich habe eine ähnliche Frage wie zuvor, aber keine der Antworten gearbeitet und ich habe scheuern, alle über das Internet versucht eine Lösung zu finden. Meine situation, ich habe einen Edit-Fenster webform mit einer dropdownlist (Hinweis: um Verwechslungen zu vermeiden, ich bin mit Telerik extensions um nur zu schmücken die webform):

 <%@ Page Language="VB" CodeFile="EditFormVB.aspx.vb" Inherits="EditFormVB" %>
<%@ Register Namespace="CustomBoundField" TagPrefix="custom" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Edit Pop-up</title>
</head>
<body class="">
    <form id="form1" runat="server">
        <div>

            <script  type="text/javascript">
                function CloseAndRebind(args) {
                    GetRadWindow().BrowserWindow.refreshGrid(args);
                    GetRadWindow().close();
                }

                function GetRadWindow() {
                    var oWindow = null;
                    if (window.radWindow) oWindow = window.radWindow; //Will work in Moz in all cases, including clasic dialog
                    else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow; //IE (and Moz as well)

                    return oWindow;
                }

                function CancelEdit() {
                    GetRadWindow().close();
                }
            </script>

            <asp:ScriptManager ID="ScriptManager2" runat="server" />
            <telerik:RadFormDecorator ID="RadFormDecorator1" runat="server" Skin="Vista" DecoratedControls="All" />
            <br />
            <br />

            <asp:DetailsView ID="DetailsView1" DataKeyNames="ID" runat="server" AutoGenerateRows="False"
                GridLines="None" DataSourceID="detailsSqlDataSource" Height="50px" Width="125px"
                BorderWidth="0" CellPadding="0" CellSpacing="7">
            <Fields>
                <asp:BoundField DataField="TS_DESCRIPTION" HeaderText="TS_DESCRIPTION" SortExpression="TS_DESCRIPTION" />
                <asp:BoundField DataField="TS_TITLE" HeaderText="TS_TITLE" SortExpression="TS_TITLE" />
                <asp:CommandField ShowEditButton="True" />
                <asp:CommandField ShowInsertButton="True" />
            </Fields>
            </asp:DetailsView>--%>

            <telerik:RadScriptManager ID="RadScriptManager1" runat="server" />
            <telerik:RadFormDecorator ID="RadFormDecorator1" runat="server" Skin="Vista" />
            <br />
            <br />

            <asp:DetailsView ID="DetailsView1" runat="server" Height="400px" Width="745px" 
                AutoGenerateRows="False" DataKeyNames="TS_ID" DataSourceID="SqlDataSource2" 
                EnableModelValidation="True">
                <Fields>

                    <asp:TemplateField HeaderText="Category">
                        <EditItemTemplate>
                            <%--<asp:DropDownList ID="TTCategory" runat="server" DataSourceID="ReqCategoryData" SelectedValue='<%# Bind("TS_NAME") %>' />--%>
                            <asp:DropDownList DataSourceID="ReqCategoryData" DataTextField="ReqCategory" DataValueField="ReqCategory"
                                ID="reqCategoryDropDown" runat="server" AppendDataBoundItems="true" AutoPostBack="true" >                                                            
                            </asp:DropDownList>
                        </EditItemTemplate>
                    </asp:TemplateField>

                    <asp:CommandField ButtonType="Button" EditText="Update" ShowEditButton="True" 
                        ShowCancelButton="True">
                    <ItemStyle HorizontalAlign="Center" />
                    </asp:CommandField>

                </Fields>
            </asp:DetailsView>

        </div>

    </form>
</body>
</html>

Und in der code-behind, ich werde die datasource der dropdownlist und mit einer Funktion zur Abfrage der DB für den Namen der Wert, den ich einstellen will, da der ausgewählte Wert beim laden der Seite zunächst:

Partial Class EditFormVB
    Inherits System.Web.UI.Page

    Public Shared category_Name As String = ""
    Dim ddlDataSource As New SqlDataSource

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

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

        ''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)

        ''Set max length of Title field to 70 characters
        Dim dvrTest As DetailsViewRowCollection = DetailsView1.Rows
        Dim TitleTB As TextBox = dvrTest.Item(0).Cells(1).Controls(0)
        TitleTB.Attributes.Add("onkeydown", "isMaxLen(this)")
        TitleTB.Attributes.Add("maxlength", "70")

        Dim myDDL As DropDownList = DetailsView1.FindControl("reqCategoryDropDown")
        ''Perform dropdown list population operations
        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 using the categoryID 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 //<--this value gets set only when debugging, 
        End If

    End Sub

    Private Function GetDataReader(ByVal sqlText As String) As SqlDataReader
        Dim dr As SqlDataReader
        Dim sqlConn As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("TTPRODReportsQuery").ConnectionString)
        sqlConn.Open()
        Dim sqlCmd As SqlCommand = New SqlCommand(sqlText, sqlConn)
        dr = sqlCmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection)
        Return dr
    End Function

End Class

Den dropdownlist hat sich aufgefüllt, sich angemessen, jedoch, wenn ich versuche, um den Wert, es spiegelt nicht, wenn die Seite geladen wird; die dropdownlist wird nur aufgefüllt und kein Wert ist ausgewählt, die im markup, also der erste Wert standardmäßig angezeigt. Das seltsame ist, dass wenn ich Debuggen, wird der Wert angezeigt zu bekommen, setzen, wenn ich Schritt für Schritt durch die Funktion, es ist, als ob die selectedvalue wird immer zurückgesetzt, sobald die Funktion beendet wird und die Erträge, die Seite zu laden. Jede Hilfe oder Einsicht ist geschätzt

LÖSUNG:
Hatte, um eine separate Funktion, die aufgerufen wird onLoad von der DropDownList nach nach Page_Load erfolgt ausführen. Immer noch ungelöst ist, ist, warum die DropDownList bindet nach dem Page_Load.

IN HTML:

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

IN DER CODE-BEHIND -

Public Shared category_Name As String = ""

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

        ''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)

        ''Set max length of Title field to 70 characters
        Dim dvrTest As DetailsViewRowCollection = DetailsView1.Rows
        Dim TitleTB As TextBox = dvrTest.Item(0).Cells(1).Controls(0)
        TitleTB.Attributes.Add("onkeydown", "isMaxLen(this)")
        TitleTB.Attributes.Add("maxlength", "70")

        Dim myDDL As DropDownList = DetailsView1.FindControl("reqCategoryDropDown")
        ''Perform dropdown list population operations
        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 using the categoryID 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()
        End If
    End Sub


        Protected Sub DDL_DataBound(ByVal sender As Object, ByVal e As System.EventArgs)
            If Page.IsPostBack = False Then
                Dim myDDL As DropDownList = DetailsView1.FindControl("reqCategoryDropDown")
                myDDL.Items.FindByValue(category_Name).Selected = True
            End If
        End Sub

InformationsquelleAutor kingrichard2005 | 2010-07-22

Schreibe einen Kommentar