Я связываю 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 не отфильтрован, но как только я фильтрую, а затем выбираю строку, он дает мне исходную информацию о строке вместо строки, которая сейчас там. Можете ли вы дать мне подсказку, чтобы я мог это исправить?