c# - 如何使用 C# 显示具有两种状态的数据

标签 c# .net mysql windows winforms

我有一个表单,因为我有用户控件(用于显示带有日期时间的成员名称)和两个组合框(一个是 cbstatus 值,如(拒绝,接受,注销)和另一个组合框 cbperiod 和值(今天,7 天, 30天..) 我像这样显示成员(member)姓名以及访问日期时间和注销日期时间..)

通过使用以下查询

  sql = @"SELECT member_Firstname, member_Lastname, member_Postcode,  
          visit_DateTime, visit_Status, visit_Logout_DateTime, visits.member_Id, visit_AlertMsg
          FROM members,visits
          WHERE members.member_Id = visits.member_Id
          AND members.member_Active LIKE 'y%'";

这工作正常......

我得到的值取决于像这样的组合框值..

 if (cbStatus.Text == "Accepts")
 {
    sql += " AND visits.visit_Status = 'accepted' ";
 }

我还有两个这样的条件...

  if (cbStatus.Text == "refusals")
 {
    sql += blahh blahh blahhhh
 }

我正在获取像这样选择 cbperiod 组合框的值...

  if (cbPeriod.Text == "Today")
  {
    string dtStartString = DateTime.Today.ToString(DataHelper.dateFormat);

    sql += string.Format(" AND visits.visit_Date = '{0}'", dtStartString);
  }
//here i am comparing the cbstatus value logout and cbperiod text with today to get the member details whose logout datetime is today

  if (cbStatus.Text == "Logout" && cbPeriod.Text == "Today")
  {
    string dtStartString = DateTime.Today.ToString("yyyy-MM-dd");            
    sql += string.Format(" AND DATE(visits.visit_Logout_DateTime) = '{0}'", dtStartString);

  }

我还有两个这样的条件....用于 cbstatus 和 cbperiod 中的值

这里我将我的值与用户控件绑定(bind)....

 datatable dt1 =  Helper.GetData(sql);


  if (dt1 != null)
  {
    if (dt1.Rows.Count > 0)
    {         
      foreach (DataRow row in dt1.Rows)
      {
        newItem = new EntryItem();// this is my usercontrol        
        if (cbStatus.Text != "Logout")
        {
          DateTime dtTemp = DateTime.Parse(row["visit_DateTime"].ToString()); // here I    am showing the data when user not selected the cbstatus text as logout I mean (refusal,..)
   but the below function overrides this data ....
          if (cbPeriod.Text == "Today") newItem.lblTime.Text = dtTemp.ToString("HH':'mm':'ss");
          else newItem.lblTime.Text = dtTemp.ToString("yyyy'-'MM'-'dd'  -  'HH':'mm':'ss");
        }

        if (row["visit_Logout_DateTime"] != DBNull.Value)
        {
          DateTime dtlogout = DateTime.Parse(row["visit_Logout_DateTime"].ToString());
          if (dtlogout != null)
          {
            if (cbStatus.Text == "Logout" && cbPeriod.Text == "Today")
            {
              newItem.lblTime.Text = dtlogout.ToString("HH':'mm':'ss");
              newItem.lblName.Text = row["member_Firstname"].ToString() + " " + row["member_Lastname"].ToString();
              newItem.lblAlertMessage.Text =  row["visit_AlertMsg"].ToString();

            }
            else
              newItem.lblTime.Text = dtlogout.ToString("yyyy'-'MM'-'dd'  -  'HH':'mm':'ss");
            newItem.lblName.Text = row["member_Firstname"].ToString() + " " + row["member_Lastname"].ToString();
            newItem.lblAlertMessage.Text = row["visit_AlertMsg"].ToString();               
          }
        }

     newItem.lblName.Text = row["member_Firstname"].ToString() + " " + row["member_Lastname"].ToString();
        newItem.lblAlertMessage.Text =  row["visit_AlertMsg"].ToString();

当我选择 cbstatus.text == logout 时,它将显示带有注销日期时间的成员的正确数据...

但是当我选择 cbstatus.text == refusals 时..它显示注销数据(具有 logoutdaatetime 的成员)..这是错误的实际它必须显示 拒绝成员visit_Datetime

我如何显示成员的数据有注销日期时间和访问日期时间

注意:一个成员同时有logoutdatetime和visitdatetime....

我的数据是这样的...

  firstname     lastname   postcode   status        visit_Logout_DateTime        visit_datetime
-------------  --------   ---------   -------        ---------------------    ----------------
 rob           peter     hhd344h      refused          2011-05-06 12:09:07     2011-05-06 08:09:34                          
peter          chan      hy78kjk      refused          2011-09-08 12:09:08     2011-05-03 06:09:34
 rock         sam        yudufg3746h  refused          2011-08-08 09:08:45    
 rob           peter     hhd344h      refused          2011-05-10 12:09:07     2011-05-10 08:09:34      

最佳答案

在sql中使用case语句。看下面的例子

sql = @"SELECT member_Firstname, member_Lastname, member_Postcode,             visit_DateTime, visit_Status, visit_Logout_DateTime, visits.member_Id, visit_AlertMsg , CustomDateColumn = CASE  visit_Status
WHEN 'refused' THEN   visit_Datetime
WHEN 'Logout' THEN  visit_Logout_DateTime
WHEN ....
End
FROM members,visits           WHERE members.member_Id = visits.member_Id           AND members.member_Active LIKE 'y%'"; 

关于c# - 如何使用 C# 显示具有两种状态的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7928347/

相关文章:

c# - 如何从 lambda 表达式返回模型属性(如 MVC 的 "Html.TextBoxFor(xxx)")?

C# 交叉引用泛型类

.net - 如何以编程方式区分/控制 Azure 内部流量与出站流量?

.net - 重定向而不更改网址?

php - 从不同的mysql表中获取时间总和

mysql - 空时连接 (mysql)

c# - 将数组对转换为数组对(如果可能,使用 LINQ)

c# - 如何摆脱虚拟表?密封类

c# - .NET MVC3 首选模型初始化

php - 避免多次准备相同的 PDO 语句的最佳方法?