.net下拉框实现查询功能
前端
<body>
<form id="form1" runat="server">
<div>
<br />
<table>
<tr>
<td>A:<asp:DropDownList ID="A" runat="server" AutoPostBack="true" autoback="true">
</asp:DropDownList>   
</td>
<td>B:<asp:DropDownList ID="B" runat="server" AutoPostBack="true" autoback="true">
</asp:DropDownList>  
</td>
<td>C:<asp:DropDownList ID="C" runat="server" AutoPostBack="true" autoback="true">
</asp:DropDownList>  
</td>
<td>D:<asp:DropDownList ID="D" runat="server" AutoPostBack="true" autoback="true">
</asp:DropDownList>  
</td>
<td>
<asp:Button ID="Select" runat="server" Text="Query" onclick="Query" />
</td>
<tr>
<asp:DataGrid id="dg0" align="left" width="90%" CellPadding="5" borderwidth="2" sortable="true" resizbale="true" HeaderStyle-HorizontalAlign="center" ItemStyle-HorizontalAlign="center" HeaderStyle-BackColor="SkyBlue" FooterStyle-BackColor="#CCCC99" FooterStyle-HorizontalAlign="center" ItemStyle-BackColor="#E7FEE2" BorderColor="#999999" font-size="10" Font-Names="Arial, 细明体" runat="server" ItemStyle-Wrap="true" AutoGenerateColumns="false" >
<Columns >
<asp:BoundColumn headertext="A" datafield="A"/>
<asp:BoundColumn headertext="B" datafield="B"/>
<asp:BoundColumn headertext="C" datafield="C"/>
<asp:BoundColumn headertext="D" datafield="D" />
</Columns>
</asp:DataGrid>
</tr>
</table>
后台
public partial class _Default : System.Web.UI.Page
{
DataSet ds = new DataSet();
DataSet ds1 = new DataSet();
DataSet ds2 = new DataSet();
SqlConnection DB= new SqlConnection(WebConfigurationManager.AppSettings["X"].ToString());
//X是在webconfig里配置的数据库连接代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
getA(); //获取列值需放if里,下拉框改变值的时候跟着变
getB();
getC();
getD();
BindData(4);
}
}
private void BindData(int selectStatus) { //筛选查询
DB.Open();
string sql_text=@"select * from table;"; //绑定数据到datagrid,默认全部查询
if (selectStatus == 4)
{
sql_text = @"select * from table;";
}
if (selectStatus ==0) //一个个添加查询条件
{
sql_text = @"select * from table where 1=1"; //where 1=1是为了方便加and
if (A.SelectedValue != "ALL") {
sql_text += "and A='" + A.SelectedValue + "'"; //A.SelectedValue即id=A的下拉框选中的值
}
if (B.SelectedValue != "ALL") {
sql_text += "and B='" + B.SelectedValue + "'";
}
if (C.SelectedValue != "ALL") {
sql_text += "and C='" + C.SelectedValue + "'";
}
if (D.SelectedValue != "ALL") {
sql_text += "and D='" + D.SelectedValue + "'";
}
}
/* if (selectStatus == 1) {
sql_text = @"select * from table where A='" + A.SelectedValue + "'";
}
if (selectStatus == 2)
{
sql_text = @"select * from table where B='" + B.SelectedValue + "'";
}
if (selectStatus == 3)
{
sql_text = @"select * from table where C='" + C.SelectedValue + "'";
}*/
SqlDataAdapter objAdapter = new SqlDataAdapter(sql_text, DB);
objAdapter.Fill(ds, "table"); //数据库连接代码,获取数据,给到前端datagrid
DataTable dt = new DataTable();
dt = ds.Tables[0];
dg0.DataSource = dt.DefaultView;
dg0.DataBind();
DB.Close();
}
private void getA() { //获取列值展现在下拉框,getA()getB()getC()getD()逻辑都一样,就只写一个了,剩下的自己写咯
DB.Open();
SqlDataAdapter adp = new SqlDataAdapter(@"select distinct A from table",DB);
adp.Fill(ds1, "A");
DB.Close();
A.DataSource = ds1.Tables["A"].Copy();
A.DataTextField = "A";
B.DataBind();
B.Items.Insert(0, new ListItem("ALL")); //下拉框加入ALL选项
}
protected void Query(object sender, EventArgs e)
{
BindData(0); //执行查询并绑定数据
}
/* protected void selectA(object sender, EventArgs e)
{
if(A.SelectedValue=="ALL"){
BindData(4);
}
BindData(0);
}
protected void selectB(object sender, EventArgs e)
{
if (B.SelectedValue == "ALL")
{
BindData(4);
}
BindData(1);
}
protected void selectC(object sender, EventArgs e)
{
if (C.SelectedValue == "ALL")
{
BindData(4);
}
BindData(2);
}
protected void selectD(object sender, EventArgs e)
{
if (D.SelectedValue == "ALL")
{
BindData(4);
}
BindData(3);
}
*/
}
我这里实现的是多个条件一起筛选,注释掉的代码是单独筛选,根据需要选择。我尽量把代码精简了。
if (!IsPostBack)以及ALL这个第一次做会不知道,要特别注意,其他还是挺好理解的。