2014-05-08 83 views
1

當前問題:我的DropDownList提供了DataTextField =「COLUMNS_NAME」DataValueField =「DATA_TYPE」屬性,DropDownList_SelectedIndexChanged()不保留基於所選輸入的文本。但它保留了項目列表中的第一個值具有重複數據值字段的DropDownList OnSelected會感到困惑並選擇第一個爲什麼?

需要解決方案:如何根據DATA_TYPE屬性保留所選輸入文本? 我試圖存儲Session [「DDLValue」] = DropDownList.SelectedItem.Text,但它始終保留滿足索引中相應DATA_TYPE的項目列表中的第一個值。

即,如果我選擇「E」從下面的DropDownList輸入保留在DropDownList中的值是「d」

如何保留「E」

COLUMN_NAME DATA_TYPE 
a   decimal 
b   decimal 
c   decimal 
d   int 
e   int 
f   varchar 
g   varchar 
h   varchar 
i   varchar 
j   varchar 

.aspx的代碼:

<asp:DropDownList ID="DropDownList5" runat="server" AutoPostBack="true" OnSelectedIndexChanged ="DropDownList5_SelectedIndexChanged" DataSourceID="MySqlDataSource"> 
</asp:DropDownList> 
<asp:SqlDataSource ID="MySqlDataSource" runat="server"> 
</asp:SqlDataSource> 

C#代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     BindDropDownLists(); 
    } 
} 

private void BindDropDownLists() 
{ 
    MySqlDataSource.ConnectionString = connection; 
    MySqlDataSource.SelectCommand = "SELECT DATA_TYPE + '_' + convert(varchar(10), ROW_NUMBER() OVER(ORDER BY DATA_TYPE))as DATA_TYPE, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = 'RESULT' AND COLUMN_NAME IN ('Column1','column2','Column3'))"; 

    DropDownList5.DataTextField = "COLUMN_NAME"; 
    DropDownList5.DataValueField = "DATA_TYPE"; 
    DropDownList5.DataBind(); 

} 
+0

你在哪裏填充下拉,它是在頁面加載? –

+0

可能是在從'dropdown'列表中獲取值之前再次填充'dropdown'列表。 –

+0

分享下拉式填充方法代碼 –

回答

1

渲染後,你的下拉列表看起來像下面,需要使用獨特的價值領域的正確選擇enter image description here

+0

可以請你幫助實現它在SqlSelectCommand – Shrivatsan

+0

你可以使用此查詢(選擇COLUMN_NAME +'_'+ convert(varchar(10),ROW_NUMBER ()OVER(ORDER BY COLUMN_NAME))from col),當你插入到數據庫中時,將它拆分爲「_」並在數據庫中創建適當的數據 –

+0

請問您可以在SqlDatasource.SelectCommand的BindDropDownList()函數中添加sql查詢? – Shrivatsan

0

由於您在data value field中有重複的值,因此問題正在發生。它正在尋找第一場比賽並選擇它。

如果你想繼續這樣做,那麼你可能會前綴一些自動增量整數並將其添加到值字段中並使用substring來獲取原始值。

1

我認爲你應該有一個獨特的下拉值。你可以嘗試製作你可以唯一識別的值。喜歡的東西:

COLUMN_NAME DATA_TYPE 
a   a_decimal 
b   b_decimal 
c   c_decimal 
d   d_int 
e   e_int 
f   f_varchar 
g   g_varchar 
h   h_varchar 
i   i_varchar 
j   j_varchar 

像這樣的解決方案將確保您在下拉菜單中具有獨特的價值。使用這個的原因是創建DATA_TYPE字符串並從中提取實際值非常簡單。只需將COLUMN_NAMEDATA_TYPE與下劃線相結合,並在需要實際值時分割爲下劃線。

問題癥結:您應該嘗試爲下拉菜單提供獨特的價值。它可能是一個ID或其他一些獨特的價值。

請以此爲起點,而不是複製粘貼解決方案。

+0

我已經改變了我的選擇命令來結合可以請你評論如果我做對了嗎? – Shrivatsan

+0

那麼,如果你這樣做的權利,你的問題應該自動解決:) –

0

正確的解決辦法:由於@Kumar馬尼什評論

選擇命令內BindDropDownLists()

private void BindDropDownLists() 
    { 
     SqlDataSource.ConnectionString = connection; 

     SqlDataSource.SelectCommand= "SELECT DATA_TYPE + '_' + convert(varchar(10), ROW_NUMBER() OVER(ORDER BY DATA_TYPE))as DATA_TYPE, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = 'RESULT' AND COLUMN_NAME IN ('Column1','column2','Column3'))"; 
     DropDownList5.DataTextField = "COLUMN_NAME"; 
     DropDownList5.DataValueField = "DATA_TYPE"; 
     DropDownList5.DataBind(); 
    } 
+0

這是可行的解決方案嗎?我收到了你的消息。 –

+0

@KrishnrajRana是的,它能夠基於唯一生成的數據值字段保留DDL值 – Shrivatsan