我有数据库表leave_rec(name,date1,leave,ltype)
,Dropdown list
和gridview
。
我想这样做,当我在下拉列表中选择月份(例如2月)时,gridview应显示2月only(e.g.rohan leuva,2/28/2013,full,casual)
的所有表值,表示月份= 2(2月)的记录。
如何克服这个问题?我尝试过,但此时我只能显示gridview
中的所有值。任何帮助都会受到极大关注。
SqlConnection conn = new SqlConnection();
conn.ConnectionString=System.Configuration.ConfigurationManager.ConnectionStrings["leave"].ConnectionString;
conn.Open();
SqlCommand cmd = new SqlCommand("select date1,leave,ltype from leave_rec where name='" + DropDownList1.SelectedValue + "'", conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
以上代码显示date1
leave
,ltype
,dropdownlist1.selectedvalue.
{{1}}但现在我希望第二次下拉,其中几个月将会出现。因此,当我在第二个中选择二月时,网格应该仅显示2月份dropdownlist1.selectedvalue的值。
答案 0 :(得分:1)
首先,您的查询必须是这样的:
select date1, leave, ltype from leave_rec where MONTH(date1) = 2 // February
然后,将其集成到您的代码中:
SqlCommand cmd = new SqlCommand("select date1, leave, ltype from leave_rec where MONTH(date1) = @p1", conn);
cmd.Parameters.Add(new SqlParameter("p1", combo.SelectedKey));
使用参数而不是字符串连接来避免SQL注入,请参阅此处的示例:http://www.dotnetperls.com/sqlparameter
(当然,使用您自己的控件名称为“combo.SelectedKey”)
答案 1 :(得分:0)
我认为查询中的问题,而不是名称,你必须写date1
SqlCommand cmd = new SqlCommand("select date1, leave, ltype from leave_rec where MONTH(date1) ='" + DropDownList1.SelectedValue + "'", conn);
答案 2 :(得分:0)
将数据集转换为DataTable 然后 - 通过dt.Filter = monthName.toString()过滤它 然后将其绑定到GridView - dt.DefaultView;
答案 3 :(得分:-1)
同意@Saurabh,研究使用Linq和存储过程来强制使用类型和建模。