0

DropDownListデータベースにバインドされている があります。リスト内の値は次のDropDownListようになります。

ベッド
ルーム1 ベッドルーム2 キッチン
1 キッチン
2

これらの項目が に一覧表示されている場合DropDownList、「Bedroom2」を選択すると「Bedroom1」自体が選択されますが、「Kitchen2」を選択すると「Kitchen1」が選択されます。

これDropDownListはさらに別の にバインドされDropDownListます。両方に AutoPostBack を設定しましたDropDownList。コードビハインドからデータソースをバインドしました。

何がうまくいかなかったのでしょうか?

データバインディング コード:

SqlDataAdapter myda = new SqlDataAdapter("Select * FROM " + Label3.Text, con);
DataSet ds = new DataSet();
myda.Fill(ds, "Table");
LOC_LIST2.DataSource = ds.Tables[0];
LOC_LIST2.DataTextField = ds.Tables[0].Columns["Location_Instance"].ColumnName.ToString(); 
LOC_LIST2.DataValueField=ds.Tables[0].Columns["Location_Type"].ColumnName.ToStri??ng(); 
LOC_LIST2.DataBind(); 
LOC_LIST2.Items.Insert(0, new ListItem("---Choose One Location---", "-1"));

したがって、上記のコードの Location_Instance は、追加されてデータベースに保存されるロケーション (Location_Type) の数であり、上記で取得されますDropDownList

これは非常に深刻な問題です。誰かが早急に私を助けてくれませんか?

4

1 に答える 1

0

ポストバック後に DropDownList に重複した項目が表示される場合は、DropDown の DataSource を設定する前に、バインド コードにこれを追加してみてください。

LOC_LIST2.Items.Clear();

これにより、DropDownList からすべてのアイテムがクリアされ、現在のバインディング コードが実行され、必要なアイテムが再度追加されます。したがって、新しいコードは次のようになります。

SqlDataAdapter myda = new SqlDataAdapter("Select * FROM " + Label3.Text, con);
DataSet ds = new DataSet();
myda.Fill(ds, "Table");
LOC_LIST2.Items.Clear();
LOC_LIST2.DataSource = ds.Tables[0];
LOC_LIST2.DataTextField =     ds.Tables[0].Columns["Location_Instance"].ColumnName.ToString(); 
LOC_LIST2.DataValueField=ds.Tables[0].Columns["Location_Type"].ColumnName.ToStri??ng(); 
LOC_LIST2.DataBind(); 
LOC_LIST2.Items.Insert(0, new ListItem("---Choose One Location---", "-1"));

また、補足として、パラメータ化された SQL ステートメントを使用して、SQL インジェクションなどから保護することをお勧めします。MSDN の例:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.selectcommand.aspx

于 2012-08-14T20:31:30.643 に答える