Добавление элемента в раскрывающийся список DataBound - PullRequest
3 голосов
/ 09 июля 2009

Да, я прочитал большинство тем здесь, но я не могу найти ответ, который работает.

У меня есть три раскрывающихся списка. Первый связан с данными для получения разных названий экспериментов. Пользователь выбирает, страница отправляет обратно, и второе раскрывающееся меню отображает различные моменты времени. Это где мне нужна помощь. Мне нужно добавить элемент в раскрывающийся список ТО, чьи ID, DataTextField, DataValueField имеют значение TimePt.

Кажется простым, но я не могу заставить его работать.

protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack)
            {
                TimePt.DataSource = TimePTDD;
                TimePt.DataValueField = "TimePt";
                TimePt.DataTextField = "TimePt";
                TimePt.DataBind();
                TimePt.Items.Insert(0, new ListItem("--Select---", "0"));
                TimePt.SelectedIndex = 0;
            }
        }

Я что-то упускаю.

Ответы [ 6 ]

5 голосов
/ 09 июля 2009

Установите AppendDataBoundItems="true" в раскрывающемся списке, и оно должно работать.

Вот похожий вопрос: Как добавить Item в список данных SqlDataSource

И еще один о потенциальных дубликатах с использованием этого метода и обходного пути для него: Dropdownlist AppendDataboundItems (первый элемент должен быть пустым)

3 голосов
/ 21 ноября 2012
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Page.IsPostBack)
        {
            TimePt.DataValueField = "TimePt";
            TimePt.DataTextField = "TimePt";
            var times = TimePTDD.ToList();
            times.Insert(0, new {TimePt="0",TimePt="--Select--"});
            TimePt.DataSource = times;
            TimePt.DataBind();
            //TimePt.SelectedIndex = 0;
        }
    }
0 голосов
/ 21 октября 2010

Я предлагаю использовать OnDataBound событие DropDownList control и оставить ваш код позади. То, что вы можете объединить DataSourceID с кодом позади.

0 голосов
/ 09 июля 2009

Моя ставка в том, что это проблема жизненного цикла страницы. Для MSDN каждый связанный с данными элемент управления, для которого установлено свойство DataSourceID, вызывает свой метод DataBind .

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

0 голосов
/ 09 июля 2009

Я вижу, что вы задаете DataSource двумя различными способами - DataSourceID в вашей разметке, а также вручную устанавливаете DataSource в вашем коде. Попробуйте удалить DataSourceID из вашей разметки и посмотрите, поможет ли это.

Прошло немного времени с тех пор, как я слишком много использовал ASP.NET, но я чувствую, что ваш DropDownList восстанавливает связь после Page_Load, который заменит ваше предыдущее связывание.

0 голосов
/ 09 июля 2009
<asp:DropDownList ID="ExpAnalysisName" runat="server"
            DataSourceID="DropDownEXP" DataTextField="ExpAnalysisName" 
            DataValueField="ExpAnalysisName" AppendDataBoundItems="true" AutoPostBack=true>
            <asp:ListItem Selected="True" Value="0">Select an Experiment</asp:ListItem>
        </asp:DropDownList>
        <asp:SqlDataSource ID="DropDownEXP" runat="server" 
            ConnectionString="<%$ ConnectionStrings:SGMD3_DataBase %>" SelectCommand="SELECT DISTINCT ExpAnalysisName FROM VW_Data">
        </asp:SqlDataSource>

<asp:DropDownList ID="TimePt" runat="server" AutoPostBack="True" DataSourceID="TimePTDD" DataTextField="TimePt" 
                DataValueField="TimePt">
        </asp:DropDownList>
            <asp:SqlDataSource ID="TimePTDD" runat="server" 
                ConnectionString="<%$ ConnectionStrings:SGMD3_DataBase %>" SelectCommand="SELECT DISTINCT TimePt
    FROM VW_Data
    WHERE ExpAnalysisName = @ExpAnalysisName">
                <SelectParameters>
                    <asp:FormParameter FormField="ExpAnalysisName" Name="ExpAnalysisName" />
                </SelectParameters>
            </asp:SqlDataSource>

So you can have a reference.
...