【问题标题】:How can I show both data with two status using c#如何使用 c# 显示具有两种状态的数据
【发布时间】:2011-12-17 05:16:18
【问题描述】:

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

通过使用以下查询

  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 中的值

在这里我将我的值与用户控件绑定....

 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的成员)..这是错误的,它必须显示refusal membersvisit_Datetime

我如何向会员显示两个数据有 logoutdatetime 和 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。
  • 但是,我不能在这里使用存储过程.....

标签: c# .net mysql windows winforms


【解决方案1】:

在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%'"; 

【讨论】:

    【解决方案2】:

    我认为您可能在 else 语句周围缺少一些括号,如下所示:

    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();
    

    此外,该块的第一行似乎可以解决您的问题。您正在将标签更改为“注销”时间。也许您想实际使用“访问”时间?

    【讨论】:

      【解决方案3】:

      我已经解决了我的问题......像这样......

              if (row["visit_Logout_DateTime"] != DBNull.Value || row["visit_DateTime"] == DBNull.Value)
              {
                if (cbStatus.Text != "Refusals" && cbStatus.Text != "Accepts" && row["visit_Logout_DateTime"] != DBNull.Value)
                {
                  DateTime dtlogout = DateTime.Parse(row["visit_Logout_DateTime"].ToString());
      
                  if (true)
                  {
                    if (cbPeriod.Text == "Today")
                    {
                      newItem.lblTime.Text = dtlogout.ToString("HH:mm:ss");
                      newItem.BackColor = Color.Cyan;
                    }
                    else
                      newItem.lblTime.Text = dtlogout.ToString("yyyy'-'MM'-'dd'  -  'HH':'mm':'ss");               
                    newItem.lblName.Text = string.Format("{0} {1}", row["member_Firstname"].ToString(), row["member_Lastname"].ToString());
                    newItem.lblAlertMessage.Text = string.Format("{0} {1}", row["member_EntryMessage"].ToString(), row["visit_AlertMsg"].ToString());
      
                    newItem.lblName.Text = string.Format("{0} {1}", row["member_Firstname"].ToString(), row["member_Lastname"].ToString());
                    newItem.lblAlertMessage.Text = string.Format("{0} {1}", row["member_EntryMessage"].ToString(), row["visit_AlertMsg"].ToString());              
                    newItem.tbHiddenId.Text = row["member_Id"].ToString();
                    newItem.ID = Convert.ToInt32(row["member_Id"].ToString());
                  }
                }
      
              }
              else if (row["visit_Logout_DateTime"] == DBNull.Value || row["visit_DateTime"] != DBNull.Value)
              {
                DateTime dtTemp = DateTime.Parse(row["visit_DateTime"].ToString());
                newItem.lblTime.Text = dtTemp.ToString(cbPeriod.Text == "Today" ? "HH':'mm':'ss" : "yyyy'-'MM'-'dd'  -  'HH':'mm':'ss");
      
                newItem.lblName.Text = string.Format("{0} {1}", row["member_Firstname"].ToString(), row["member_Lastname"].ToString());
                newItem.lblAlertMessage.Text = string.Format("{0} {1}", row["member_EntryMessage"].ToString(), row["visit_AlertMsg"].ToString());
      
                newItem.tbHiddenId.Text = row["member_Id"].ToString();
                newItem.ID = Convert.ToInt32(row["member_Id"].ToString());
              }           
      

      【讨论】:

        猜你喜欢
        • 2021-11-07
        • 2023-03-03
        • 2018-03-18
        • 2013-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        相关资源
        最近更新 更多