有一种需求,样子大概是这样的
根据不同的选择条件进行筛选,根据筛选条件动态的显示结果,在本次应用程序中筛选的结果是放在gridview中显示,
本demo实现根据用户从下拉框中选择的数据对gridview进行数据筛选,下拉框数据从数据库中获取。
前台页面,定义一个dropdownlist和gridview就行了:
<div>
<asp:DropDownList ID="DropDownList1" runat="server"
onselectedindexchanged="DropDownList1_SelectedIndexChanged"
AutoPostBack="True">
</asp:DropDownList>
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
</div>
后台代码:绑定gridview数据大家根据自己情况写了。
如果你是用gridview的话下面2步就比较坑爹了,所以很多时候都不用gridview显示数据了。比较好的显示数据方法在.net中用repeater,都是被gridview折磨的人啊。
言归正传,首先:定义一个model类,和dataset里面的数据对应,后面将dateTable转换成list时用。
/// <summary>
/// model类里面的两个属性其实是dropdownlist的Name和Value属性。在本例中两个属性都一样。
/// </summary>
class ToolDataModel
{
public string Name { get; set; }
public string Value { get; set; }
}
//将dataTable转换成list的model集合,并去掉list中重复项,用于绑定dropdownlist.
private List<ToolDataModel> DataTableToList(DataTable dt)
{
List<ToolDataModel> modelList = new List<ToolDataModel>();
int rowsCount = dt.Rows.Count;
if (rowsCount > 0)
{
ToolDataModel model;
//遍历为list初始出
for (int n = 0; n < rowsCount; n++)
{
model = new ToolDataModel();
if (dt.Rows[n]["m__strToolName"] != null && dt.Rows[n]["m__strToolName"].ToString() != "")
{
model.Name = dt.Rows[n]["m__strToolName"].ToString();
}
if (dt.Rows[n]["m__strToolName"] != null && dt.Rows[n]["m__strToolName"].ToString() != "")
{
model.Value = dt.Rows[n]["m__strToolName"].ToString();
}
modelList.Add(model);
}
}
//去除list中重复项,这是一个很简单的算法,一看就懂了
for (int i = 0; i < modelList.Count; i++)
{
for (int j = i + 1; j < modelList.Count; j++)
{
if (modelList[i].Name == modelList[j].Name)
{
modelList.RemoveAt(modelList.LastIndexOf(modelList[i]));
}
}
}
return modelList;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindView();
}
}
private void BindView() {
GridView1.DataSource = DataTest.BindData();
GridView1.DataBind();
//将datatable转换成list集合再绑定数据,ToolDataModel是model类
List<ToolDataModel> lstItems = DataTableToList(DataTest.BindData().Tables[0]);
//本来是想用linq去掉dropdownlist中重复值,如下面代码,但是linq的distinct很坑爹,所以自己写了一个。
//var query = (from data in lstItems
// select data).Distinct<ToolDataModel>();
DropDownList1.DataSource = lstItems;
//这里绑定model类里的两个属性。看出来为什么要设置name和value两个属性了吧。
DropDownList1.DataTextField = "Name";
DropDownList1.DataValueField = "Value";
DropDownList1.DataBind();
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
DataView dv = new DataView();
dv = DataTest.BindData().Tables[0].DefaultView;
//m__strToolName是dataSet的一个属性,用DataView的RowFilter属性筛选dataset
dv.RowFilter = "m__strToolName=" + DropDownList1.SelectedValue;
GridView1.DataSource = dv;
GridView1.DataBind();
}
很简单的demo,希望对大家有所帮助,有更好的方法,欢迎大家留言。
注:如果确定dropdownlist中没有重复值,则可以不用辅助类也不用设置一个model类,直接奔主题。