0

ASP.NET WebForms でプロジェクトを作成しています。何度もやったのですが、今回はドロップダウンリストが大変困っています。

DB からアイテムを取得し、FOR ループを使用してドロップダウン リストに 1 つずつ追加します。それはうまくいきます。しかし、問題は、リストから項目を快適に選択できないことです。ドロップダウンリストから項目を選択しようとすると、選択が最初の要素にスナップされ、目的の項目を選択することが非常に難しくなります。

どうすれば修正できますか?

リストの 9 番目の項目にカーソルを移動すると、1 番目と 9 番目の項目が交互に選択されるので、両方が選択されていることがわかります。

コードビハインド

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        DropDownList1.Items.Clear();

        con.ConnectionString = ConfigurationManager.ConnectionStrings["familyConnectionString"].ConnectionString;
        con.Open();

        adp = new SqlDataAdapter("select distinct family_head from family", con);
        DataSet ds = new DataSet();
        adp.Fill(ds, "family");
        con.Close();

        for (int i = 0; i < ds.Tables["family"].Rows.Count; i++)
            DropDownList1.Items.Add(ds.Tables["family"].Rows[i][0].ToString());
    }
}

ASPX

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:DropDownList ID="DropDownList1" runat="server" Width="150px">
    </asp:DropDownList>
    &nbsp;&nbsp;&nbsp;&nbsp;
    <asp:DropDownList ID="DropDownList2" runat="server" Width="150px">
    </asp:DropDownList>
    &nbsp;&nbsp;&nbsp;&nbsp;

    <asp:Button ID="Button1" runat="server" Height="30px" onclick="Button1_Click" 
        Text="Submit" Width="145px" BackColor="#465767" ForeColor="White" />

    <asp:RoundedCornersExtender ID="Button1_RoundedCornersExtender" runat="server" 
        Enabled="True" TargetControlID="Button1" Corners="All" Radius="10">
    </asp:RoundedCornersExtender>
    <br />
    <br />
    <br />
</asp:Content>

CSS キーフレーム アニメーションがページの背景で機能しています。それが原因でしょうか?

4

1 に答える 1

0

WebControlのデータバインディングがどのように機能するかについては、ある種の混乱があるようです。そのための最良のリファレンスは次のとおりです。http://msdn.microsoft.com/en-us/library/ms178472.aspx

仮定の下で、DropDownList1のすべてのバインディングコードが表示されます。

DropDownList1.Items.Clear();

アイテムはPostBackごとに保持されるべきではないため、必要ではありません。(少なくとも、データソースが再度バインドされない場合、各PostBackの後にすべてのアイテムが失われるためだと思います)。

DropDownListを使用する場合は、DropDownListに各PostBackにアイテムが必要です。使用しています

if (!Page.IsPostBack)

つまり、PostBackがある場合は、アイテムを再度バインドする必要はありません。上記のリンクでは、LoadEvent中にコントロールがプロパティ(ボタンをクリックする前に選択されたアイテムなど)を設定していることがわかります。つまり、OnInit中など、ライフサイクルの早い段階でアイテムをバインドする必要があります。

次のようなものを試してください。

protected void BindDropDownList1()
{
 con.ConnectionString = ConfigurationManager.ConnectionStrings["familyConnectionString"].ConnectionString;
 con.Open();
 adp = new SqlDataAdapter("select distinct family_head from family", con);
 DataSet ds = new DataSet();
 adp.Fill(ds, "family");
 con.Close();
 for (int i = 0; i < ds.Tables["family"].Rows.Count; i++)
   DropDownList1.Items.Add(ds.Tables["family"].Rows[i][0].ToString());
}

    protected override void OnInit(EventArgs e)
    {
       this.BindDropDownList1();
       base.OnInit(e);
    }

もう1つの提案は、の代わりにDropDownListのDataSourceプロパティを使用することですDropDownList1.Items.Add。このアプローチを使用する場合は、DropDownListのDataKeyValueプロパティとDataKeyMemberプロパティを設定する必要があります。

protected void BindDropDownList1()
{
 con.ConnectionString = ConfigurationManager.ConnectionStrings["familyConnectionString"].ConnectionString;
 con.Open();
 adp = new SqlDataAdapter("select distinct family_head from family", con);
 DataSet ds = new DataSet();
 adp.Fill(ds, "family");
 con.Close();
 DropDownList1.DataSource = ds;
 DropDownList1.DataBind();
}

編集
私はあなたのエラーを見つけたと思います。AjaxControlToolKitのコントロールを使用していますが、引き続きを使用していScriptManagerます。約2年間、AjaxControlToolKitからのコントロールには。が必要ですToolkitScriptManager。をに置き換えScriptManagerますToolkitScriptManager

于 2013-01-05T09:45:33.410 に答える