【问题标题】:How to show the selected value from the drop down list and show it in gridview如何从下拉列表中显示所选值并在gridview中显示
【发布时间】:2015-12-09 04:06:28
【问题描述】:

我希望它显示从下拉列表中选择的值,并将其显示在 gridview 上。它应该使用 Where 来从数据库中查询以指示要显示的选定值。例如,我从下拉列表中选择 james。它应该去数据库并查询 james 行。之后,网格视图应该只显示一个 james 的值。但现在我遇到了一个问题,网格视图显示数据库中可用的所有数据。

public partial class Search_Engine : System.Web.UI.Page
{
#region Database

static string HostName = "localhost";
static string DatabaseName = "finalproject";
static string TableName = "truckinfo";
//static string TableBucket = "bucketbrigade";
static string UserName = "root";
static string Password = "";

//--- Used for access to database infomation-----
string ConnStr = "Data Source=" + HostName + ";" +
                 "Database=" + DatabaseName + ";" +
                 "User ID=" + UserName + ";" +
                 "Password=" + Password;

string Qry = "";

MySqlConnection Con;
MySqlCommand Cmd;
MySqlDataReader Rdr;

#endregion
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {

        BindData();


        using (Con = new MySqlConnection(ConnStr))
        {
            Con.Open();
            using (Cmd = new MySqlCommand("SELECT * FROM truckinfo", Con))
            {

                using (Rdr = Cmd.ExecuteReader())
                {
                    if (Rdr.HasRows)
                    {
                        DropDownList1.DataSource = Rdr;
                        DropDownList1.DataValueField = "truckplateno";
                        DropDownList1.DataTextField = "truckplateno";
                        DropDownList1.DataBind();
                    }
                }
            }
        }
    }
}
private void BindData()
{
    DataTable dt = new DataTable();
    try
    {
        MySqlConnection Con = new MySqlConnection(ConnStr);
        Con.Open();
        MySqlDataAdapter da = new MySqlDataAdapter("SELECT * FROM " +
                          DatabaseName + "." + TableName , Con);


        da.Fill(dt);
        if (dt.Rows.Count > 0)
        {
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }

        Con.Close();

    }
    catch (Exception ex)
    {
        Response.Write(ex.ToString());
    }
}



protected void TextBox1_TextChanged(object sender, EventArgs e)
{




}
protected void Button1_Click(object sender, EventArgs e)
{

}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{

}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    Con = new MySqlConnection(ConnStr);
    Con.Open();
    try
    {
        String getquery;
        // String a;
        getquery = DropDownList1.Text;
        TextBox1.Text = getquery;
        // a = TextBox2.Text;
        //  TextBox1.Text = a;
        Qry = @"SELECT * FROM finalproject.truckinfo WHERE truckplateno=" + "'" + getquery + "'" + ";";
        Cmd = new MySqlCommand(Qry, Con);
        Cmd.ExecuteNonQuery();
        Con.Close();
        BindData();
    }
        catch (Exception ex)
    {
        Response.Write(ex.ToString());
    }
}
}

【问题讨论】:

  • 当您在DropDownList1_SelectedIndexChanged 末尾调用BindData 时,您实际上是在重建整个表。也许将查询作为BindData 中的参数传递。但是,我希望这只是一个“学习”项目,因为您构建这些查询的方式会将自己暴露在大量安全漏洞(google sql 注入攻击)中。

标签: c# asp.net


【解决方案1】:

您需要使用下拉列表的SelectedValue 获取selected value,然后使用该值查询database

getquery = DropDownList1.SelectedValue;

另外,您正在使用BindData 方法,该方法将始终来自databaseselect all 数据,您需要seprate 此方法,因此只有selected data 绑定到gridview。

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
String getquery;
getquery = DropDownList1.Text;
MySqlConnection Con = new MySqlConnection(ConnStr);
Con.Open();
MySqlDataAdapter da = new MySqlDataAdapter("SELECT * FROM finalproject.truckinfo WHERE truckplateno='" + getquery + "'", Con);
da.Fill(dt);
if (dt.Rows.Count > 0)
{
    GridView1.DataSource = dt;
    GridView1.DataBind();
}

Con.Close();

}

您正在调用ExecuteNonQuey 函数,该函数用于InsertUpdate 中的database 数据,因此它不会return 任何数据。

另外,当使用SqlDataAdapter 时,您不需要显式调用 OpenClose 函数用于打开和关闭连接。

【讨论】:

    【解决方案2】:

    将 DropDownlist_SelectedIndexChanged 函数更改为以下内容:

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
    Con = new MySqlConnection(ConnStr);
    DataTable dt = new DataTable();
    try
    {
        Con.Open();
        string getquery = DropDownList1.SelectedValue;
        TextBox1.Text = getquery;
        // a = TextBox2.Text;
        //  TextBox1.Text = a;
        Qry = @"SELECT * FROM finalproject.truckinfo WHERE truckplateno=" + "'" + getquery + "'" + ";";
        MySqlCommand ddlCMD = new MySqlCommand(Qry, Con);
        MySqlDataAdapter msda = new MySqlDataAdapter(ddlCMD);
        msda.Fill(dt);
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }
        catch (Exception ex)
    {
        Response.Write(ex.ToString());
    }
    finally{
        Con.Close();
    }
    

    }

    【讨论】:

    • finally大括号里应该放什么
    • @user14963 将 Con.Close() 从 try-block 删除到 finally-block。我改变了答案
    猜你喜欢
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2018-08-14
    • 1970-01-01
    • 2020-07-10
    • 2018-03-01
    相关资源
    最近更新 更多