DropDownList与重复的数据值字段OnSelected混淆并选择第一个为什么?
当前问题:我的DropDownList随DataTextField =“COLUMNS_NAME”DataValueField =“DATA_TYPE”属性一起提供,DropDownList_SelectedIndexChanged()不会根据所选输入保留文本。 但它保留了项目列表中的第一个值
需要解决方案:如何根据DATA_TYPE属性保留选定的输入文本? 我尝试存储Session [“DDLValue”] = DropDownList.SelectedItem.Text但它始终保留满足Index中存在的相应DATA_TYPE的项列表中的第一个值。
即如果我从以下DropDownList输入中选择“e” ,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代码:
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(); }
渲染后,您的下拉列表如下所示, 需要使用唯一值字段进行正确选择
我认为你应该有下拉列表的唯一值。 您可以尝试制作可以唯一标识的值。 就像是:
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_NAME
和DATA_TYPE
与下划线结合使用,并在需要实际值时在下划线上拆分。
症结:你应该尝试为下拉列表赋予独特的价值。 它可以是ID或其他一些独特的价值。
请以此为出发点,而不是复制粘贴解决方案。
由于data value field
中存在重复值,因此问题正在发生。 它正在寻找第一场比赛并选择它。
如果你想继续这个,那么你可以为一些自动增量整数添加前缀并将其添加到值字段中并使用substring
来获取原始值。
正确的解决方案:感谢@Kumar Manish的评论
在BindDropDownLists()中选择Command
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(); }