Внутри цикла, если условие не работает? - PullRequest
0 голосов
/ 19 октября 2019

Я пытаюсь получить данные из базы данных в текстовое поле при изменении индекса. Я получаю вывод, но я использую простой оператор if внутри моего цикла, но он не работает, где я делаю неправильно Пожалуйста, помогите мне ??

Позвольте мне объяснить. Я использую два текстовых поля txtEmployeeNumber и txtEmployeename на txtEmployeeNumber_TextChanged. Я написал свой логический код таким образом, чтобы при txtEmployeeNumber_TextChanged срабатывании txtEmployeename заполнял соответствующие данные, а если txtEmployeeNumber текст не совпадает ни с однимданных затем следует из-за ошибки No Data Found. Но в обоих случаях я получаю одно и то же сообщение об ошибке

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);
            }
        }
    }
}

1 Ответ

0 голосов
/ 20 октября 2019

Некоторые вещи идут не так, в первую очередь вы просматриваете все строки в сетке, пока изменилось только одно текстовое поле. Таким образом, для каждого Employeeumber в каждой строке, отсутствующей в таблице данных, вы уже получаете сообщение об ошибке.

Вы можете найти active / currentrow с помощью: (sender как TextBox) .NamingContainer как 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);
}
...