Gridview возвращает неправильную строку после фильтрации с помощью DDL (SelectedIndexChanged) - PullRequest
0 голосов
/ 21 апреля 2020

Я связываю GridView с SQL следующим образом:

protected void Page_Load(object sender, EventArgs e)
        {
            Page.Header.Title = "Familias";

            Response.AppendHeader("Cache-Control", "no-store");

            if (Session["username"] == null)
            {
                Response.Redirect("Default.aspx");
            }
            if (!Page.IsPostBack)
            {
                // Populate Product DDL
                using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["cs"].ConnectionString))
                {

                    SqlCommand cmd = new SqlCommand("SELECT DISTINCT [Product], ID FROM CHECKLISTS_PRODUCTS", connection);

                    SqlDataAdapter da = new SqlDataAdapter(cmd);

                    DataTable dt = new DataTable();
                    da.Fill(dt);

                    dropDownList_Product.DataTextField = "Product";
                    dropDownList_Product.DataValueField = "ID";
                    dropDownList_Product.DataSource = dt;
                    dropDownList_Product.DataBind();
                    dropDownList_Product.Items.Insert(0, new ListItem("--Seleccionar--", "0"));

                    if (connection.State != ConnectionState.Closed)
                        connection.Close();
                }
            }
            // Add Users Information to Table

            string strCon = ConfigurationManager.ConnectionStrings["cs"].ConnectionString;

            using (var connection = new SqlConnection(strCon))
            {
                SqlCommand cmd = new SqlCommand("SELECT DISTINCT CHECKLISTS_PRODUCTS.ID, CHECKLISTS_PRODUCTS.Product as [Producto], CHECKLISTS_FAMILIES.Family as Familia, CHECKLISTS_FAMILIES.Product_ID, CHECKLISTS_FAMILIES.Action as Editar, CHECKLISTS_FAMILIES.ID FROM CHECKLISTS_PRODUCTS INNER JOIN CHECKLISTS_FAMILIES ON CHECKLISTS_PRODUCTS.ID = CHECKLISTS_FAMILIES.Product_ID ORDER BY CHECKLISTS_FAMILIES.ID ASC", connection);
                SqlDataAdapter sda = new SqlDataAdapter(cmd);

                connection.Open();

                sda.SelectCommand = cmd;

                DataTable dt = new DataTable();
                sda.Fill(dt);

                // BIND DATABASE WITH THE GRIDVIEW

                GridView.DataSource = dt;
                GridView.DataBind();
            }
        }

Я добавляю кнопку редактирования для редактирования каждой строки:

protected void GridView_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
        {
                if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.Header)
                {
                    //HIDE COLUMNS
                    e.Row.Cells[0].Visible = false;
                    e.Row.Cells[3].Visible = false;
                    e.Row.Cells[5].Visible = false;
                }

                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    // CREATE A LinkButton AND IT TO EACH ROW.

                    LinkButton lb = new LinkButton();

                    lb.Click += new EventHandler(lb_Click);  // you need this code to handle the click event of the link button

                    lb.ID = "LinkButton1";
                    lb.Text = "Editar";

                    e.Row.Cells[4].Controls.Add(lb);
                }
            }

        private void lb_Click(object sender, EventArgs e)

        {

            LinkButton lb = (LinkButton)sender;
            GridViewRow row = (GridViewRow)lb.NamingContainer;
            if (row != null)
            {
                int index = row.RowIndex; //gets the row index selected
            }

            var closeLink = (Control)sender;
            GridViewRow row2 = (GridViewRow)closeLink.NamingContainer;

            string zeroCellText = row2.Cells[0].Text;
            string firstCellText = row2.Cells[1].Text;
            string secondCellText = row2.Cells[2].Text;
            string thirdCellText = row2.Cells[3].Text;
            string fourthCellText = row2.Cells[5].Text;

            Session["ID"] = zeroCellText;
            Session["Product"] = firstCellText;
            Session["Family"] = secondCellText;
            Session["Product_ID"] = thirdCellText;
            Session["Family_ID"] = fourthCellText;

            Response.Redirect("Admin_Family_Edit.aspx");
        }

После связывания я пытаюсь отфильтровать его с помощью DDL следующим образом:

protected void dropDownList_Product_SelectedIndexChanged(object sender, EventArgs e)
        {
                //Filter Data
                DataTable dt = new DataTable();
                string strCon = ConfigurationManager.ConnectionStrings["cs"].ConnectionString;

                using (SqlConnection con = new SqlConnection(strCon))
                {
                    con.Open();
                    if (dropDownList_Product.SelectedValue != "")
                    {
                        SqlCommand cmd = new SqlCommand("SELECT DISTINCT CHECKLISTS_PRODUCTS.ID, CHECKLISTS_PRODUCTS.Product as [Producto], CHECKLISTS_FAMILIES.Family as Familia, CHECKLISTS_FAMILIES.Product_ID, CHECKLISTS_FAMILIES.Action as Editar, CHECKLISTS_FAMILIES.ID FROM CHECKLISTS_PRODUCTS INNER JOIN CHECKLISTS_FAMILIES ON CHECKLISTS_PRODUCTS.ID = CHECKLISTS_FAMILIES.Product_ID WHERE CHECKLISTS_PRODUCTS.ID= @Product ORDER BY CHECKLISTS_FAMILIES.ID ASC", con);
                        cmd.Parameters.AddWithValue("@Product", dropDownList_Product.SelectedValue);
                        SqlDataAdapter da = new SqlDataAdapter(cmd);
                        da.Fill(dt);
                    }
                    else
                    {
                        SqlCommand cmd = new SqlCommand("SELECT DISTINCT CHECKLISTS_PRODUCTS.ID, CHECKLISTS_PRODUCTS.Product as [Producto], CHECKLISTS_FAMILIES.Family as Familia, CHECKLISTS_FAMILIES.Product_ID, CHECKLISTS_FAMILIES.Action as Editar, CHECKLISTS_FAMILIES.ID FROM CHECKLISTS_PRODUCTS INNER JOIN CHECKLISTS_FAMILIES ON CHECKLISTS_PRODUCTS.ID = CHECKLISTS_FAMILIES.Product_ID ORDER BY CHECKLISTS_FAMILIES.ID ASC", con);
                        SqlDataAdapter da = new SqlDataAdapter(cmd);
                        da.Fill(dt);
                    }
                    con.Close();
                    GridView.DataSource = dt;
                    GridView.DataBind();
                }
            }
        }
    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...