【问题标题】:Inside for loop if condition not working?如果条件不起作用,则在 for 循环内部?
【发布时间】:2019-10-19 14:27:44
【问题描述】:

我正在尝试在选择索引更改时将数据从数据库获取到文本框。我得到了一个输出,但我在循环中使用了简单的 if 语句,但它不起作用我在哪里做错了请帮助我??

让我解释一下。我在txtEmployeeNumber_TextChanged 上使用两个文本框txtEmployeeNumbertxtEmployeename 我已经编写了我的逻辑代码,当txtEmployeeNumber_TextChanged 触发时txtEmployeename 应该填充其各自的数据,如果txtEmployeeNumber 文本与任何不匹配数据然后应该通过错误未找到数据。但在这两种情况下,我都会收到相同的错误消息

protected void txtEmployeeNumber_TextChanged(object sender, EventArgs e)
{
    string EmployeeNo = "";
    string EmployeeName = "";
    int Row = 0;
    foreach (GridViewRow row in grdRegister.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            EmployeeNo = (row.Cells[1].FindControl("txtEmployeeNumber") as TextBox).Text;
        }
        DataTable dt = new DataTable();
        dt = (DataTable)Application["Employee_details"];
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            if (dt.Rows[i]["Employee_ID"].ToString() == EmployeeNo)
            {
                (row.Cells[2].FindControl("txtEmployeeName") as TextBox).Text = dt.Rows[i]["Employee_Name"].ToString();
                EmployeeName = (row.Cells[2].FindControl("txtEmployeeName") as TextBox).Text;
                break;
            }
            else if ((row.Cells[2].FindControl("txtEmployeeName") as TextBox).Text == "")
            {
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Error", "alert('No Data Found...')", true);
            }
        }
    }
}

【问题讨论】:

  • 这里有三个if,哪个if不工作?
  • If 语句仅在您的条件为真时才会通过。如果您在任何情况下都只看到一个输出,则意味着您的第一个条件不满足,这意味着 dt.Rows[i]["Employee_ID"].ToString() 不等于 EmployeeNo
  • else if ((row.Cells[2].FindControl("txtEmployeeName") as TextBox).Text == "") 如果我的条件在这两种情况下为真或假,则始终阻止触发它的整流罩
  • 收到错误消息后,我正在从数据库中获取数据
  • @MasLoo its dt.Rows[i]["Employee_ID"].ToString() 过滤我的数据表数据以匹配employeenumber

标签: c# asp.net for-loop if-statement foreach


【解决方案1】:

有些地方出了问题,首先你浏览了网格中的所有行,而只有一个文本框发生了变化。因此,对于不在数据表中的每一行中的每个 Employeenumber,您已经收到错误消息。

您可以通过以下方式找到活动/当前行:(作为 TextBox 的发送者)。作为 GridViewRow 的命名容器。

其次,对于数据表中的每条记录,当您找到员工编号之前(如果),当文本框为空时,您会收到错误消息。

下面的代码应该做你想做的。

protected void txtEmployeeNumber_TextChanged(Object sender, EventArgs e) {
    string EmployeeNo = "";
    string EmployeeName = "";

    DataTable dt = (DataTable)Application["Employee_details"];
    var row = (sender as TextBox).NamingContainer as GridViewRow;

    EmployeeNo = (row.FindControl("txtEmployeeNumber") as TextBox).Text;
    var txtEmployeeName = (row.FindControl("txtEmployeeName") as TextBox);
    EmployeeName = txtEmployeeName.Text;

    for (int i = 0; i < dt.Rows.Count; i++) {
        if (dt.Rows[i]["Employee_ID"].ToString() == EmployeeNo) {
            txtEmployeeName.Text = dt.Rows[i]["Employee_Name"].ToString();
            return;
        }
    }
    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Error", "alert('No Data Found...')", true);
}

【讨论】:

  • 惊人的输出如预期伟大的解释也理解逻辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
相关资源
最近更新 更多