Я нажимаю на кнопку редактирования, не сортируя заголовок моего столбца в DataGridView
, это отлично работает, я могу отредактировать строку и значения в выпадающем списке.
Однако, когда я сортирую столбец, а затем нажимаю «Изменить» - это позволяет мне редактировать исходную DataGridView
, а не отсортированную версию.
Я думаю, что это проблема, связывающая сетку данных на кнопке редактирования, поскольку она нигде не хранит порядок сортировки, но не может понять, как сохранить сеанс сортировки и применить его в методе GetgvCaseListData()
.
Приведенный ниже код работает нормально перед сортировкой, но прерывается при сортировке GridView
и нажатии кнопки редактирования:
protected void GetgvCaseListData()
{
string connectionstring = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
SqlConnection cn = new SqlConnection(connectionstring);
SqlCommand cmd = new SqlCommand("[dbo].cr_fe_list", cn);
cmd.Parameters.AddWithValue("@subteamno", SubTeam);
SqlDataAdapter da = new SqlDataAdapter(cmd);
cmd.CommandType = CommandType.StoredProcedure;
DataTable ds = new DataTable();
da.Fill(ds);
if (ds.Rows.Count > 0)
{
gvCaseList.DataSource = ds;
gvCaseList.DataBind();
ViewState["dirState"] = ds;
ViewState["sortdr"] = "Asc";
}
else
{
noresultsvalidation.Visible = true;
gvCaseList.DataSource = ds;
gvCaseList.DataBind();
ViewState["dirState"] = ds;
ViewState["sortdr"] = "Asc";
}
protected void gvCaseList_RowDataBound(object sender, GridViewRowEventArgs e)
{
MeasurementID = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "MeasurementID"));
string connectionstring = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
SqlConnection cn = new SqlConnection(connectionstring);
if (e.Row.Cells[10].Text == "OVERDUE")
{
e.Row.Cells[10].ForeColor = System.Drawing.Color.Red;
e.Row.Cells[10].Font.Bold = true;
}
if (e.Row.RowType == DataControlRowType.DataRow && ((e.Row.RowState & DataControlRowState.Edit) > 0))
{
cn.Open();
DropDownList DropDownList1 = (e.Row.FindControl("ddlException") as DropDownList);
TextBox tb1 = (e.Row.FindControl("ExceptionText") as TextBox);
SqlCommand cmd = new SqlCommand("[dbo].cr_fe_exception", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@SubTeamNo", SubTeam);
cmd.Parameters.AddWithValue("@MeasurementID", MeasurementID);
DataTable dt = new DataTable();
using (SqlDataAdapter a = new SqlDataAdapter(cmd))
{
a.Fill(dt);
}
cn.Close();
DropDownList1.DataSource = dt;
DropDownList1.DataTextField = "ExceptionDesc";
DropDownList1.DataValueField = "ExceptionID";
DropDownList1.DataBind();
DropDownList1.Items.Insert(0, new ListItem("--Select Exception--", "0"));
if (CurrentException != "")
{
DropDownList1.SelectedValue = DropDownList1.Items.FindByText(CurrentException).Value;
tb1.Enabled = true;
}
}
}
protected void gvCaseList_edit(object sender, GridViewEditEventArgs e)
{
Label label1 = (Label)gvCaseList.Rows[e.NewEditIndex].FindControl("Label1");
CurrentException = label1.Text;
gvCaseList.EditIndex = e.NewEditIndex;
GetgvCaseListData();
}
protected void gvCaseList_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dtrslt = (DataTable)ViewState["dirState"];
if (dtrslt.Rows.Count > 0)
{
if (Convert.ToString(ViewState["sortdr"]) == "Asc")
{
dtrslt.DefaultView.Sort = e.SortExpression + " Desc";
ViewState["sortdr"] = "Desc";
}
else
{
dtrslt.DefaultView.Sort = e.SortExpression + " Asc";
ViewState["sortdr"] = "Asc";
}
gvCaseList.DataSource = dtrslt;
gvCaseList.DataBind();
}
}