.NET C#DropDownList将参数传递给函数

时间:2017-04-07 14:42:22

标签: c# asp.net oracle

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

    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

我的经理不希望我更改查询字符串。 (之前我曾使用&#34;从code_desc中选择id,code,descr,其中code_type_id =(从code_desc中选择id,其中descr =:searchTerm);&#34;其中searchTerm是字符串描述,因此不需要id)

4 个答案:

答案 0 :(得分:1)

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

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

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

然后,您可以通过将值转换为getQueryResults来使用SelectedValue调用int

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

最后,谷歌parameratized queries

答案 1 :(得分:0)

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

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,或者甚至更好地传递字符串值。

答案 2 :(得分:0)

您可以使用它传入一个int。

int parameter = Convert.ToInt32(DropDownList1.SelectedValue);

答案 3 :(得分: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);
}