2017-04-07 90 views
0

我真的不知道该怎么说这个...我有一个下拉列表查询数据库并显示基于ID的描述列表。我希望用户能够选择描述,按下按钮并使用传递的id而不是描述来调用getQueryResults()函数。由于冲突类型,getQueryResults(DropDownList1.SelectedValue)不起作用。我还能使用什么?NET C#DropDownList传递参数到功能

protected void Page_Load(object sender, EventArgs e) 
    { 
     DataConnector dc = new DataConnector(); 
     DropDownList1.DataSource = dc.getCodeTypes(); 
     DropDownList1.DataValueField = "id"; 
     DropDownList1.DataTextField = "description"; 
     DropDownList1.DataBind(); 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     DataConnector dc = new DataConnector(); 
     GridView2.DataSource = dc.getQueryResults(DropDownList1.SelectedValue); //error: cannot convert from string to int 
     GridView2.DataBind(); 

    } 

    public List<CodeDesc> getQueryResults(int searchTerm) 
    { 
     try 
     { 
      string query = "select id, code, descr from code_desc where code_type_id = :searchTerm"; 
      //more stuff 

我的经理不希望我改变查询字符串。 (以前我曾用过“select code,descr from code_desc where code_type_id =(select_id from code_desc where descr =:searchTerm);”其中searchTerm是字符串描述,因此不需要id)

+0

GridView2.DataSource = dc.getQueryResults(Convert.ToInt32(DropDownList1.SelectedValue)); – levent

回答

1

首先在IsPostBack检查中包装DropDownList DataBinding。

if (!Page.IsPostBack) 
{ 
    DropDownList1.DataSource = dc.getCodeTypes(); 
    DropDownList1.DataValueField = "id"; 
    DropDownList1.DataTextField = "description"; 
    DropDownList1.DataBind(); 
} 

我不这样做,每当你加载页面时数据被再次绑定,DropDownList就会回到它的第一个值。

然后,您可以通过将该值转换为intSelectedValue调用getQueryResults

GridView2.DataSource = dc.getQueryResults(Convert.ToInt32(DropDownList1.SelectedValue)); 

最后,谷歌parameratized queries

0

SelectedValue从DropDownList的类属性是一个字符串

https://msdn.microsoft.com/fr-fr/library/system.web.ui.webcontrols.listcontrol.selectedvalue(v=vs.110).aspx

[BindableAttribute(true, BindingDirection.TwoWay)] 
[BrowsableAttribute(false)] 
[ThemeableAttribute(false)] 
public virtual string SelectedValue { get; set; } 

的,这就是为什么你得到这个皈依错误,你需要将字符串解析成一个int,甚至更好只是传递的字符串值。

0

你可以用它来传入一个int。

int parameter = Convert.ToInt32(DropDownList1.SelectedValue); 
0
public class ComboboxItem 
    { 
     public string Text { get; set; } 
     public object Value { get; set; } 

     public override string ToString() 
     { 
      return Text; 
     } 
    } 

protected void Page_Load(object sender, EventArgs e) 
{ 
    DataConnector dc = new DataConnector(); 
    DropDownList1.DataSource = dc.getCodeTypes(); 
    ComboboxItem item = new ComboboxItem(); 
      item.Text = "id" 
      item.Value = "description"; 

      DropDownList1.Items.Add(item); 
} 
+0

这应该适用于这个问题。我有类似的问题获得ID – Elias