В моем проекте asp.net у меня есть GridView , и мне нужно добавить возможность редактировать строки .Я не могу использовать ObjectDataSource из-за специфики моего проекта.Вот мой метод:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = GridView1.Rows[e.RowIndex];
string constr = ConfigurationManager.ConnectionStrings["postgresConnectionString"].ConnectionString;
using (NpgsqlConnection cn = new NpgsqlConnection(constr))
{
int ID = Convert.ToInt32(GridView1.Rows[e.RowIndex].Cells[1].Text);
string Name = GridView1.Rows[e.RowIndex].Cells[2].Text;
string Date = GridView1.Rows[e.RowIndex].Cells[3].Text;
string Nodes = GridView1.Rows[e.RowIndex].Cells[4].Text;
string query = "UPDATE vacations SET name=@Name,date=@Date,nodes=@Nodes Where id=@ID";
NpgsqlCommand cmd = new NpgsqlCommand(query, cn);
cmd.Parameters.Add("@Name", NpgsqlDbType.Varchar).Value = Name;
cmd.Parameters.Add("@Date", NpgsqlDbType.Varchar).Value = Date;
cmd.Parameters.Add("@Nodes", NpgsqlDbType.Varchar).Value = Nodes;
cmd.Parameters.Add("@Id", NpgsqlDbType.Integer).Value = ID;
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
GridView1.DataBind();
}
Вот способ, которым я создаю столбцы для моего GridView (в случае необходимости), он идет вручную, нажимая кнопку:
protected void Button3_Click(object sender, EventArgs e)
{
conn.Open();
bf1.HeaderText = "Number";
bf1.DataField = "id";
bf1.ReadOnly = true;
bf1.SortExpression = "NomerVac";
bf2.HeaderText = "Date of vacation";
bf2.DataField = "date";
bf2.SortExpression = "DataVac";
bf3.HeaderText = "Additional info";
bf3.DataField = "nodes";
bf3.SortExpression = "PrimVac";
GridView1.Columns.Add(bf1);
GridView1.Columns.Add(bf2);
GridView1.Columns.Add(bf3);
NpgsqlCommand cmd = new NpgsqlCommand();
NpgsqlDataAdapter sqlDavac = new NpgsqlDataAdapter("SELECT id, date, nodes FROM vacations where name = '" + (string)Session["Name"] + "' ", conn);
DataTable dtblvac = new DataTable();
sqlDavac.Fill(dtblvac);
GridView1.DataSource = dtblvac;
GridView1.DataBind();
}
Когда я нажимаюредактировать, я не получаю ошибки, он просто стирает все данные в столбцах.Вы можете видеть это на скриншоте: прежде чем я нажму изменить
и после: