如何禁用按钮

时间:2013-08-01 13:25:25

标签: c# asp.net mysql

如果检索到的日期小于当前日期,我想停用button6,我已经使用了下面的代码,但它不起作用。请帮我找错。

protected void Button6_Click1(object sender, EventArgs e)
{
    MySqlConnection connection = new MySqlConnection("server=localhost; database=e-learningsystem; uid=root; password=123;port=3307;");
    connection.Open();
    try
    {
        MySqlCommand cmd = new MySqlCommand("SELECT Date FROM fundamentals of is WHERE ChapNo=Chapter 1", connection);
        string date = Convert.ToString(cmd.ExecuteScalar());
        //date = cmd;
        if (Convert.ToDateTime(cmd).CompareTo(System.DateTime.Now) < 0)
        {
            DownLoadFileFromServer("~/NewFolder1/" + "Fundamentals of IS.pdf");
        }
        else
        {
            Button6.Enabled = false;
        }
    }  
    catch (Exception ex)
    {
        // file IO errors

    }
}

这是serverMapPath代码

public static string ServerMapPath(string path)
{
    return HttpContext.Current.Server.MapPath(path);
}

public static HttpResponse GetHttpResponse()
{
    return HttpContext.Current.Response;
}
public static void DownLoadFileFromServer(string fileName)
{
    //This is used to get Project Location.
    try
    {
        string filePath = ServerMapPath(fileName);
        //This is used to get the current response.
        HttpResponse res = GetHttpResponse();
        res.Clear();
        res.AppendHeader("content-disposition", "attachment; filename=" + filePath);
        res.ContentType = "application/octet-stream";
        res.WriteFile(filePath);
        res.Flush();
        res.End();
    }
    catch (Exception ex)
    {

    }
}

8 个答案:

答案 0 :(得分:1)

MSDN答案:

我认为这会对你有所帮助

int result = DateTime.Compare(date1, date2);

string relationship;
if (result < 0)
   relationship = "is earlier than";
else if (result == 0)
   relationship = "is the same time as";         
else
   relationship = "is later than";

答案 1 :(得分:0)

MySqlCommand cmd = new MySqlCommand("SELECT Date FROM fundamentals of is WHERE ChapNo=Chapter 1", connection);
string date = Convert.ToString(cmd.ExecuteScalar());
//date = cmd;
if (Convert.ToDateTime(cmd).CompareTo(System.DateTime.Now) < 0)

您确定要Convert.ToDateTime(cmd)吗?

您不想Convert.ToDateTime(date)吗?

答案 2 :(得分:0)

以下行可能会出现逻辑错误,因为您要将cmd变量转换为DateTime而不是您的命令返回的date

  if (Convert.ToDateTime(cmd).CompareTo(System.DateTime.Now) < 0)

使用它可能会解决您的问题:

  if (Convert.ToDateTime(date).CompareTo(System.DateTime.Now) < 0)

答案 3 :(得分:0)

如果要在检索的日期小于当前日期时停用按钮,则应该反转if语句条件,并使用date字符串而不是cmd

if (Convert.ToDateTime(cmd).CompareTo(System.DateTime.Now) < 0)

if (Convert.ToDateTime(date).CompareTo(System.DateTime.Now) >= 0)

如果日期高于或等于当前日期,您可以将文件下载到服务器,如果日期小于当前日期,则禁用该按钮。

或者只是颠倒整个if:

    if (Convert.ToDateTime(date).CompareTo(System.DateTime.Now) < 0)
    {
        Button6.Enabled = false;
    }
    else
    {
        DownLoadFileFromServer("~/NewFolder1/" + "Fundamentals of IS.pdf");
    }

答案 4 :(得分:0)

您可能想转换date

if (Convert.ToDateTime(date).CompareTo(System.DateTime.Now) < 0)

每次点击该行都会抛出异常。

答案 5 :(得分:0)

一个选项是在javascript中禁用它(在点击事件中) 另一种选择是在Page_Onload中编写相同的代码(并检查ISPostback)

答案 6 :(得分:0)

嗯,除了每个人提到if (Convert.ToDateTime(cmd).CompareTo(System.DateTime.Now) < 0) //need to use date instead of cmd的明显问题之外,代码还包含一个使用过于通用的catch块的反模式。

代码正在捕获异常来处理IO异常。但是,如果还有其他类型的例外呢?我开始怀疑由于某种原因,Convert.ToDateTime抛出了一个错误,这个错误被catch语句吞没,你认为它只能捕获 IO异常。事实上,它会捕获任何类型的异常,包括可能通过调用FormatException引发的Convert.ToDateTime

但接下来我会解释它可能是SqlException

此行中也存在无效的SQL:

MySqlCommand cmd = 
    new MySqlCommand("SELECT Date FROM fundamentals of is WHERE ChapNo=Chapter 1",
    connection);

我认为应该是:

MySqlCommand cmd = 
    new MySqlCommand("Select Date from fundamentals where ChapNo='Chapter 1'",
    connection); //that is, if ChapNo is a STRING/TEXT!

执行此命令将抛出由于您的catch语句而无法检测到的错误。您需要使catch语句尽可能具体。

答案 7 :(得分:0)

你有Button6.Enabled = false;在try catch中throw an Exception。尝试将其复制到您的方法之上,如下所示,以查看它是否正常工作:

protected void Button6_Click1(object sender, EventArgs e)
{
    Button6.Enabled = false;
    MySqlConnection connection = new MySqlConnection("server=localhost;     ..
..
}

如果有效,那么在try catch中的语句中找到错误。

同样双击你的aspx code。也许您正在引用一个名为Button6_Click的方法,而不是发布的Button6_Click1(可能是Button6_Click的副本)