具有多个条件的语句未在c#中返回预期行为

时间:2016-03-08 08:12:07

标签: c# mysql asp.net

我在ASP.NET c#和MySQL数据库中工作。

在我的数据库表的doDate字段中,我可以有三个值:

  
      
  1. Null
  2.   
  3. 0000-00-00
  4.   
  5. 2016年3月8日
  6.   

当字段doDate的值为:

时,我需要
  
      
  1. 0000-00-00
  2.   
  3. 2016年3月8日
  4.   

禁用 TextBox txtdoDate,我试过了:

    txtdoDate1 = dr["doDate"] == DBNull.Value ? "" : dr["doDate"] == "0000-00-00" ? "0000-00-00" : Convert.ToDateTime(dr["doDate"]).ToString("dd/MM/yyyy");

    if (txtdoDate1.ToString() != "")
    {
        txtdoDate.Text = txtdoDate1.ToString();
        txtdoDate.Enabled = false;
    }
    else
    {
        txtdoDate.Enabled = true;
    }

但是当字段doDate的值为:

  

0000-00-00

TextBox txtdoDate已启用且为空。

你能帮我解决一下这个问题吗?

提前致谢。

编辑#1

protected void loadsRecord()
{
    using (OdbcConnection cn =
    new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnMySQL"].ConnectionString))
    {
        sql = @" SELECT ..... ; ";

        using (OdbcCommand command =
                new OdbcCommand(sql, cn))
        {
            try
            {
                command.Connection.Open();
                dr = command.ExecuteReader();

                while (dr.Read())
                {

                txtdoDate1 = dr["doDate"] == DBNull.Value ? "" : (dr["doDate"] == "0000-00-00" ? "0000-00-00" : Convert.ToDateTime(dr["doDate"]).ToString("dd/MM/yyyy"));

                if (txtdoDate1.ToString() != "")
                   {
                      txtdoDate.Text = txtdoDate1.ToString();
                      txtdoDate.Enabled = false;
                   }
                   else
                   {
                      txtdoDate.Enabled = true;
                   }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                command.Connection.Close();
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

使用它像:

txtdoDate1 = dr["doDate"] == DBNull.Value ? "" : (dr["doDate"] == "0000-00-00" ? "0000-00-00" : Convert.ToDateTime(dr["doDate"]).ToString("dd/MM/yyyy"));

将第二个条款包含在parantheses

答案 1 :(得分:0)

这是正确的行为,因为您正在使用以下if语句

if (txtdoDate1.ToString() != "")
{
    txtdoDate.Text = txtdoDate1.ToString();
    txtdoDate.Enabled = false;
}
else
{
   txtdoDate.Enabled = true;
}

dr["doDate"] == "0000-00-00" txtdoDate中存储的"0000-00-00"txtdoDate1.ToString() != ""不是if时。您必须在if (txtdoDate1.ToString() != "" && txtdoDate1.ToString() != "0000-00-00") 语句中修改条件,如下所示:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

X = np.array([[3,2,1],[4,5,6]])
Y = np.array([[1,2,1],[2,3,4]])
Z = np.array([[10,11,12],[13,12,16]])

for i in range(0,X.shape[0]):

    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')

    ax.scatter(X[i,:], Y[i,:], Z[i,:], c='r', marker='o')

    ax.set_xlabel('Z')
    ax.set_ylabel('X')
    ax.set_zlabel('Y')

    plt.show()