0

我有数据库表leave_rec(name,date1,leave,ltype)aDropdown list和 a 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, ltypedropdownlist1.selectedvalue.但是现在我想要第二个下拉列表,其中月份将在那里。因此,当我在第二个中选择 2 月时,网格应仅显示 2 月的 dropdownlist1.selectedvalue 的值。

4

4 回答 4

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”使用您自己的控件名称)

于 2013-03-04T11:37:57.983 回答
0

我认为查询中的问题,而不是 name 你必须写 date1

SqlCommand cmd = new SqlCommand("select date1, leave, ltype from leave_rec where MONTH(date1) ='" + DropDownList1.SelectedValue + "'", conn);
于 2013-03-04T11:44:59.203 回答
0

然后将数据集转换为 DataTable - 通过 dt.Filter=monthName.toString() 对其进行过滤,然后将其绑定到 GridView - dt.DefaultView;

于 2013-03-04T12:24:42.810 回答
-1

同意@Saurabh,研究使用 Linq 和存储过程来强制使用类型和建模。

于 2013-03-04T11:34:47.303 回答