2015-07-13 42 views
0

我想允许用户通过刚开始日期进行搜索。我遇到了这一点,但我不知道如何修改它,这样如果用户输入7它将检索之日起所有从七月开始数据或任何月7如何搜索开始日期

例如:用户进入7和搜索,输出将是:7/2/2015或2/7/2015。

protected void btnSearch_Click(object sender, EventArgs e) 
{ 
    string constr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString; 
    using (SqlConnection con = new SqlConnection(constr)) 
    { 
     using (SqlCommand cmd = new SqlCommand("SELECT OrderID, OrderDate, ShipName, ShipCity FROM Orders WHERE OrderDate BETWEEN @From AND @To", con)) 
     { 
      using (SqlDataAdapter da = new SqlDataAdapter(cmd)) 
      { 
       cmd.Parameters.AddWithValue("@From", Convert.ToDateTime(this.txtFrom.Text, new CultureInfo("en-GB"))); 
       cmd.Parameters.AddWithValue("@To", Convert.ToDateTime(this.txtTo.Text, new CultureInfo("en-GB"))); 
       DataSet ds = new DataSet(); 
       da.Fill(ds); 
       GridView1.DataSource = ds; 
       GridView1.DataBind(); 
      } 
     } 
    } 
} 
+0

日期时间的startDate =新日期时间(2015年,7,1)。按乡村文化输入日期时间(月 - 日与月 - 日)并不简单,因为您需要在代码中添加国家。相反,使用户输入的通用时间为yyyy-mm-dd。 – jdweng

+0

@jdweng对不起,我没有明白。我想做一个搜索,然后数据将检索并绑定到gridview。我如何更改sqlcommand? –

+0

你的意思是,如果用户输入7,那么你的应用程序应该检索7月份的所有记录? – SpiderCode

回答

0

你的问题不是很清楚,所以我想你需要有只包含日期等于值由用户或一个月等于值由用户给出给出的订单日期。如果我的假设是正确的,你可以尝试下面的方法:

for (var intCount = 0; intCount < ds.Tables[0].Rows.Count; intCount++) 
{ 
    var dateTime = Convert.ToDateTime(ds.Tables[0].Rows[intCount]["OrderDate"]); 
    if (!dateTime.Day.ToString().Equals("7") && !dateTime.Month.ToString().Equals("7")) //Replace 7 with user input 
    { 
     ds.Tables[0].Rows[intCount].Delete(); 
    } 
} 
ds.AcceptChanges(); 

然后用ds填充你的网格。

但同样我对你为什么不这样做对数据的基础上侧本身这种操作有点好奇。因为将所有数据通过网络编码,然后对其执行过滤操作会减慢应用程序的运行速度。

0

看起来像SQL问题给我。您可能想要尝试使用DATEPART SQL命令。如果用户在txtFrom中输入数字,则不会将其转换为日期进行比较。你可以设置SqlCommand到:

"SELECT OrderID, OrderDate, ShipName, ShipCity 
    FROM Orders 
    WHERE DATEPART(month, OrderDate) BETWEEN @From AND @To 
    OR DATEPART(day, OrderDate) BETWEEN @From AND @To " 

如果他们没有在txtTo输入值,所以只是一个开始日期,你可以做

var from = txtFrom.Text; 
var to = txtTo.Text; 
if (string.IsNullOrEmpty(to)) 
{ 
    to = from; 
} 

这将用一个月的7陷阱什么如果他们在发件人栏中输入7,则为7天。