【问题标题】:How to display only date in Label in C#如何在 C# 中的标签中仅显示日期
【发布时间】:2020-05-12 08:08:50
【问题描述】:

通过组合选择索引更改事件,我从标签中的表中获取数据,除日期外一切顺利。问题:标签显示日期为 12:00,我只需要日期 (dd/MMM/yyyy) 而不是时间 12:00。这个日期在表格列和网格视图中都是完美的。只有标签在标签 (AcPtRgDateLbl.Text) 中显示错误。

代码如下:

private void AcPtPtrDd_SelectedIndexChanged(object sender, EventArgs e)
        {
            cmd = new SqlCommand("SELECT * FROM Patients where pt_ptr='" + AcPtPtrDd.Text.ToString() + "'", con);
            con.Open();
            cmd.ExecuteNonQuery();
            SqlDataReader dr;
            dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                string idn = (string)dr["pt_name"].ToString();
                string idn1 = (string)dr["pt_date"].ToString();//Problem is here Please help to solve it.
                string idn4 = (string)dr["pt_aid"].ToString();
                string idn9 = (string)dr["pt_phone"].ToString();
                AcPtNameLbl.Text = idn;
                AcPtRgDateLbl.Text = idn1;
                AcPtAidLbl.Text = idn4;
                AcPtPhonLbl.Text = idn9;
                if (AcPtAidLbl.Text == "-")
                {
                    AcPtAidTxt.Enabled = false;
                }
                else
                {
                    AcPtAidTxt.Enabled = true;
                }
            }
            con.Close();
        }

来自 SQL 的表:

ALTER procedure [dbo].[pa_getPtAccountsDataLike]
@data nvarchar(50)
as
select
p.pta_id as 'ID',
p.pta_ptr as 'PtR',
p.pta_date as 'Date',
p.pta_fee as 'Fee',
p.pta_dis as 'Discount',
p.pta_aid as 'Aid',
p.pta_rcv as 'Receive',
p.pta_bal as 'Balance'
from PtAccounts p
where
p.pta_ptr like '%'+@data+'%'
or
p.pta_date like '%'+@data+'%'
order by p.pta_ptr desc

【问题讨论】:

  • string idn1 = Convert.ToDateTime(dr["pt_date"]).ToString("dd/MMM/yyyy");
  • 非常感谢 亲爱的 Dmitry Bychenko, 您的代码运行良好。焊接。

标签: c# date label


【解决方案1】:

尝试读取为DateTime,然后将其表示为string

string idn1 = Convert.ToDateTime(dr["pt_date"]).ToString("dd/MMM/yyyy");

更多代码(让我们完善您的解决方案):

//DONE: required fields only; parametrized query
string sql = 
  @"SELECT pt_name,
           pt_date,
           pt_aid,
           pt_phone 
      FROM Patients
     WHERE pt_ptr = @pt_ptr";

//DONE: wrap IDisposable in using
using (var cmd = new SqlCommand(sql, con)) {
  //TODO: cmd.Parameters.Add("@pt_ptr", AcPtPtrDd.Text, Rdbms_Type_Here);
  // (explicit add) is a better implementation 
  cmd.Parameters.AddWithValue("@pt_ptr", AcPtPtrDd.Text);

  using (var dr = cmd.ExecuteReader()) {
    //DONE: we read at most one record only; no need in while 
    if (dr.Read()) {
      AcPtNameLbl.Text   = Convert.ToString(dr["pt_name"]);
      AcPtRgDateLbl.Text = Convert.ToDateTime(dr["pt_date"]).ToString("dd/MMM/yyyy");
      AcPtAidLbl.Text    = Convert.ToString(dr["pt_aid"]);
      AcPtPhonLbl.Text   = Convert.ToString(dr["pt_phone"]);
    }
    else {
      //DONE: what if we have an empty cursor?  
      AcPtNameLbl.Text   = "";
      AcPtRgDateLbl.Text = "";
      AcPtAidLbl.Text    = "-";
      AcPtPhonLbl.Text   = "";
    }

    AcPtAidTxt.Enabled = AcPtAidLbl.Text != "-";
  }   
} 

【讨论】:

  • 是的,这是 C# 编码的专业方式。我学到了它,并再次感谢您的友好指导。如果我的项目中出现任何问题,我会与您保持联系。
【解决方案2】:

请试试这个

string idn1 = dr["pt_date"].ToString("dd/MMM/yyyy");

【讨论】:

  • 我做到了,但没有结果。在 ToString ::::::::::: string idn1 = dr["pt_date"].ToString("dd/MMM/yyyy"); 处显示错误红线;
猜你喜欢
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
相关资源
最近更新 更多