Mengikat DropDownList di dalam DetailsView

Saya mengalami masalah saat mencoba mengisi daftar dropdown dari database. Ketika saya mencoba mengatur sumber data, saya tidak dapat menemukan kontrol dropdown, itu ada di DetailsView jadi saya pikir itu mungkin ada hubungannya dengan itu hanya dibuat ketika dalam mode edit. Ia masih mengatakan itu dalam mode saat ini ketika saya sedang mengedit, jadi tidak yakin apa yang terjadi di sana.

Berikut kode dari file 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>

Dan ini dari kode di belakangnya:

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

person annelie    schedule 23.04.2010    source sumber
comment
Dalam metode apa sampel Anda dari kode di belakang ada?   -  person Matthew Jones    schedule 23.04.2010


Jawaban (2)


Jika belum, letakkan sampel dari kode Anda di belakang dalam metode DetailsView1_ModeChanged atau DetailsView1_DataBound. Jika pada metode DetailsView1_ModeChanging sebenarnya modenya belum berubah.

EDIT: Selain itu, pastikan Anda menyiapkan DataTextField dan DataValueField seperti ini:

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

Hapus juga ikatan SelectedValue; itu tidak melakukan apa pun kecuali kesalahan melempar.

EDIT 2: Jika Anda benar-benar perlu memilih nilai tertentu dari daftar dropdown saat pertama kali menjadi databind, Anda dapat melakukan sesuatu seperti ini:

if(DropDownList1.Items.Contains(DropDownList1.Items.FindByValue("Value")))
{
    DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue("Value));
}
person Matthew Jones    schedule 23.04.2010
comment
Saya mencoba menempatkannya dalam metode DetailsView_DataBound, itu menimbulkan kesalahan pada SelectedValue saya, tetapi jika saya menghapusnya, daftar itu akan terisi. Meskipun hanya dengan System.Collections.ArrayList alih-alih nilai yang saya inginkan, jadi saya rasa saya perlu mengatur properti teks dan nilai! :) Saya akan mencoba mengaturnya lalu mengujinya lagi dengan SelectedValue di sana. - person annelie; 23.04.2010
comment
Terima kasih, saya akan mencobanya! Saya memiliki daftar array dari daftar array jadi hanya perlu mengubahnya terlebih dahulu. Maka semoga berhasil! :) - person annelie; 23.04.2010
comment
Benar, berfungsi dengan baik, terima kasih banyak! Untuk beberapa alasan itu tidak memposting nilainya ketika saya membuat pembaruan sehingga disetel ke nol, tapi menurut saya itu cerita yang berbeda. Mungkin akan memposting pertanyaan lain jika saya tidak menyelesaikannya sendiri. :) - person annelie; 23.04.2010

coba lakukan dalam metode 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();
        }
    }
}

ingat untuk mengatur OnItemCreated="DetailsView1_ItemCreated"

person Glennular    schedule 23.04.2010
comment
Terima kasih, ini berhasil menemukan kontrolnya, namun gagal pada ddlRegions.DataBind() yang memunculkan kesalahan Metode pengikatan data seperti Eval(), XPath(), dan Bind() hanya dapat digunakan dalam konteks kontrol databound.. - person annelie; 23.04.2010
comment
Gunakan Metode DataBinder.Eval(Container.DataItem,region_name) Daripada Eval(“region_name”) - person Glennular; 23.04.2010