【问题标题】:Unable to hide the panel无法隐藏面板
【发布时间】:2017-05-03 07:54:36
【问题描述】:

我正在制作一个 asp.net Web 表单应用程序。如果任何用户输入错误,则显示验证。但是,当用户第二次输入正确时,代码可以正常工作,唯一的问题是错误消息没有被删除。

在页面加载功能中

pnlStatus.Visible = true;

Button_Click 事件写在下面

 protected void btnAffRntGoClick(object sender, EventArgs e)
{
    DateTime dtFrom = new DateTime();
    DateTime dtTo = new DateTime();
    bool dt1 = true;
    bool dt2 = true;
    int result;

    if (DateTime.TryParse(txtStartDate.Text, out dtFrom) == false)
    {
        dtFrom = new DateTime(1900, 1, 1);
        dt1 = false;
    }

    if (DateTime.TryParse(txtEndDate.Text, out dtTo) == false)
    {
        dtTo = new DateTime(2100, 1, 1);
        dt2 = false;
    }
    result = DateTime.Compare(dtTo, dtFrom);
    if ((dt1 == true && dt2 == true) && result > 0)
    {
        lblPageStatus.Text = string.Empty;
        pnlStatus.Visible = false;


        DataSet ds = SqlHelper.ExecuteDataset(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString(), "SPNAME",
        Convert.ToInt64(ddl.SelectedValue), dtFrom.Date.ToShortDateString(), dtTo.Date.ToShortDateString(), ddl2.SelectedValue, Chk1.Checked);

        if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
        {
// Code to generate Excel
        }
        else
        {
            pnlStatus.Visible = true;
            lblPageStatus.Text = "No data available to export.";
        }
    }
    else
    {
        pnlStatus.Visible = true;
        lblPageStatus.Text = "Please Check the Dates";
    }
}

我们将不胜感激任何类型的帮助。

提前致谢

【问题讨论】:

  • 您是否更改了生成 excel 的 if 语句中所需的值?
  • 当然你的代码需要进行代码审查

标签: c# asp.net webforms asp.net-2.0 buttonclick


【解决方案1】:

简短的回答是我猜你只需要在有数据时相应地更新你的控件。

    if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
    {
       // Code to generate Excel
        pnlStatus.Visible = false;
        lblPageStatus.Text = string.Empty;
    }
    else
    {
        pnlStatus.Visible = true;
        lblPageStatus.Text = "No data available to export.";
    }

长答案 - 您的代码应该被清理并符合一些标准以实现可读性。可能这就是你迷路的原因。可以引入其他方法来简化。以下是快速概述。此外,pnlStatus.Visible 和 lblPageStatus.Text 可以用一行代码设置在一个地方(但可读性有点复杂)。

需要考虑的事项:

  • 给变量起有意义的名字
  • 避免代码重复(关注DRY,KISS,YAGNI;使用extension methods)
  • 让您的代码尽可能地具有可读性(意味着任何人都可以阅读您的代码)

    private const string connectionString = 
    ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
    
    protected void btnAffRntGoClick(object sender, EventArgs e)
    {
        var from = new DateTime(1900, 1, 1);
        var to = new DateTime(2100, 1, 1);
    
        var isValidStartDate = !DateTime.TryParse(txtStartDate.Text, out from);
        var isValidEndDate = !DateTime.TryParse(txtEndDate.Text, out to);
    
        var hasValidDates = isValidStartDate && isValidEndDate;
        var hasDifference = DateTime.Compare(from, to) > 0;
    
        var shouldCheckDates = !hasValidDates || !hasDifference;
    
        if (shouldCheckDates)
        {
            pnlStatus.Visible = true;
            lblPageStatus.Text = "Please Check the Dates";
            return;
        }
    
        DataSet ds = SqlHelper.ExecuteDataset(connectionString,
            "SPNAME",
            Convert.ToInt64(ddl.SelectedValue)
            , @from.Date.ToShortDateString(),
            to.Date.ToShortDateString()
            , ddl2.SelectedValue
            , Chk1.Checked
        );
    
        var hasData = ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0;
    
        pnlStatus.Visible = !hasData;
        lblPageStatus.Text = hasData ? string.Empty : "No data available to export.";
    
    }
    

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多