Связывание DropDownList внутри DetailsView - PullRequest
3 голосов
/ 23 апреля 2010

У меня проблемы с заполнением выпадающего списка из базы данных. Когда я пытаюсь установить источник данных, я не могу найти раскрывающийся элемент управления, он находится в DetailsView, поэтому я думаю, что он может иметь отношение к тому, что он создается только в режиме редактирования. Он по-прежнему говорит, что он находится в текущем режиме, когда я редактирую, поэтому не уверен, что там происходит.

Вот код из файла aspx:

<asp:DetailsView id="DetailsView1" runat="server" AutoGenerateRows="false" DataSourceID="myMySqlDataSrc"  DataKeyNames="id" AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" AutoGenerateInsertButton="False" >
     <Fields>
        <asp:TemplateField HeaderText="Region">
            <ItemTemplate><%# Eval("region_name") %></ItemTemplate>
            <EditItemTemplate>
                <asp:DropDownList ID="RegionDropdownList" runat="server" SelectedValue='<%# Bind("region_id")%>' />
            </EditItemTemplate>
        </asp:TemplateField>        
     </Fields>
</asp:DetailsView>

И это из кода:

ArrayList regionsList = BPBusiness.getRegions();
if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
{
    DropDownList ddlRegions = (DropDownList)DetailsView1.FindControl("RegionDropdownList");
    if (ddlRegions != null)
    {
        ddlRegions.DataSource = regionsList;
        ddlRegions.DataBind();
    }
}

Ответы [ 2 ]

3 голосов
/ 23 апреля 2010

Если это еще не так, поместите образец из вашего кода внутри метода DetailsView1_ModeChanged или DetailsView1_DataBound. Если он находится в методе DetailsView1_ModeChanging, режим фактически еще не изменился.

РЕДАКТИРОВАТЬ: Кроме того, убедитесь, что вы настроили DataTextField и DataValueField следующим образом:

DropDownList1.DataTextField = "TextFieldName";
DropDownList1.DataValueField = "ValueFieldName";

Также удалите привязку SelectedValue; он ничего не делает, кроме ошибок выброса.

РЕДАКТИРОВАТЬ 2: Если вам действительно нужно выбрать определенное значение в раскрывающемся списке, когда оно сначала связано с данными, вы можете сделать что-то вроде этого:

if(DropDownList1.Items.Contains(DropDownList1.Items.FindByValue("Value")))
{
    DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue("Value));
}
2 голосов
/ 23 апреля 2010

попробуйте сделать это в методе itemcreated

protected void DetailsView1_ItemCreated(object sender, EventArgs e)
{
    ArrayList regionsList = BPBusiness.getRegions();
    if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
    {
        DropDownList ddlRegions = (DropDownList)DetailsView1.FindControl("RegionDropdownList");
        if (ddlRegions != null)
        {
            ddlRegions.DataSource = regionsList;
            ddlRegions.DataBind();
        }
    }
}

не забудьте установить OnItemCreated="DetailsView1_ItemCreated"

...