Как сделать обновляемый GridView в ItemTemplate - PullRequest
0 голосов
/ 28 сентября 2011

Я хочу показать данные сотрудника в GridView.Мой клиент хочет, чтобы он мог обновлять запись, не нажимая кнопку «Изменить» для обновления.Поэтому я сохранил все в поле ItemTemplate GridView.

Мои таблицы базы данных: Emp (EmpNo, EName, Sal, DeptNo) Dept (DeptNo, DeptName, Location)

Следовательно, янаписал один sp для получения данных: EmpNo, EName, Sal, DeptName

Здесь я хочу показать поле DeptName в DropDownList.Вот только я сталкиваюсь с проблемой.DropDownList не заполняется правильным значением DeptName, но первым полем.

Мой код выделен следующим образом:

public partial class GvwEmployee : System.Web.UI.Page
{
    SqlConnection objConn = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["STERIAConnectionString"].ConnectionString);
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            GridView1.DataSource = EmployeeList;
            GridView1.DataBind();
        }
    }

    private List<Employee> EmployeeList
    {
        get{
                List<Employee> employeeList = new List<Employee>();
                SqlCommand objCmd = new SqlCommand("usp_GetEmpDetails", objConn);
                objCmd.CommandType = CommandType.StoredProcedure;
                objConn.Open();
                SqlDataReader objDR = objCmd.ExecuteReader();
                while (objDR.Read())
                {
                    Employee employee = new Employee();
                    employee.EmpNo = Convert.ToInt32(objDR["EmpNo"]);
                    employee.EName = Convert.ToString(objDR["EName"]);
                    employee.Salary = Convert.ToDouble(objDR["Salary"]);
                    employee.DeptNo = Convert.ToInt32(objDR["DeptNo"]);
                    employee.DeptName = Convert.ToString(objDR["DeptName"]);
                    employeeList.Add(employee);
                }
                objDR.Close();
                objConn.Close();
                return employeeList;
        }
    }

    private List<Department> DeptList
    {
        get
        {
            List<Department> deptList = new List<Department>();
            SqlCommand objCmd = new SqlCommand("usp_GetDeptDetails", objConn);
            objCmd.CommandType = CommandType.StoredProcedure;
            objConn.Open();
            SqlDataReader objDR = objCmd.ExecuteReader();
            while (objDR.Read())
            {
                Department dept = new Department();
                dept.DeptNo = Convert.ToInt32(objDR["DEPTNO"]);
                dept.DName = Convert.ToString(objDR["DNAME"]);
                dept.Location = Convert.ToString(objDR["Location"]);
                deptList.Add(dept);
            }
            objDR.Close();
            objConn.Close();
            return deptList;
        }
    }

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DropDownList ddlDeptName = e.Row.FindControl("ddlDeptName") as DropDownList;
            if (ddlDeptName != null)
            {
                ddlDeptName.DataSource = DeptList;
                ddlDeptName.DataBind();
                ddlDeptName.SelectedValue = GridView1.DataKeys[e.Row.RowIndex].Value.ToString();
            }
        }
        if (e.Row.RowType == DataControlRowType.Footer)
        {
        }
    }
}

Может кто-нибудь сказать, в чем проблема, почему DeptName DropDownListне заполняете его правильными значениями?

Ответы [ 2 ]

0 голосов
/ 04 октября 2011

Я получил решение, как показано ниже:

В методе события GridView1_RowDataBound я написал следующую строку кода для сопоставления DropDownList с данными, полученными из Backend.

// ddlDeptName.SelectedValue = GridView1.DataKeys [e.Row.RowIndex] .Value.ToString ();

Теперь я заменил вышеуказанную строку следующей строкой кода, и, следовательно, проблема была решена:

ddlDeptName.SelectedValue = ((Сотрудник) e.Row.DataItem) .DeptNo.ToString ();

, и это решило мою проблему.

0 голосов
/ 28 сентября 2011

Попробуйте вот так

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var index = Convert.ToInt32(e.RowIndex.ToString());
        GridViewRow row = GridView1.Rows[index];
        var ddlDeptName = row.FindControl("ddlDeptName") as ddlDeptName;
        if (ddlDeptName != null)
        {
            ddlDeptName.DataSource = DeptList;
            ddlDeptName.DataTextField = "DName";
            ddlDeptName.DataValueField = "DeptNo";
            ddlDeptName.DataBind();
            var item = new ListItem("Select Department", "");
            ddlDeptName.Items.Insert(0, item);
        }
    }     
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...