Я сделал soluton в VS 2010 для вас.
http://www.fileconvoy.com/dfl.php?id=gf8df2b85b587e3c2999379985e0a4fcad2e7e3a74
Основная идея заключается в том, чтобы настроить сетку (и сетку-элементы) с атрибутами «данными», которая будет содержать всю информацию, необходимую о поле и значении для обновления на стороне сервера при редактировании закончено.
Данные отправляются обратно на сервер через ajax (по jQuery), когда динамически созданный вход потерял фокус.
Подготовка сетки:
protected void Page_Load(object sender, EventArgs e)
{
var ds = new[] {
new { Id = 0, Name = "Joe" },
new { Id = 1, Name = "Nick" }
};
GridView1.RowDataBound += new GridViewRowEventHandler(GridView1_RowDataBound);
GridView1.Attributes.Add("data-upd-route", "GridWorker.aspx");
GridView1.DataSource = ds;
GridView1.DataBind();
}
public void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("data-id", e.Row.DataItem.GetType().GetProperty("Id").GetValue(e.Row.DataItem, null).ToString());
e.Row.Cells[1].Attributes.Add("data-col-name", "Name");
e.Row.Cells[1].Attributes.Add("class", "bg-updatable");
}
}
JQuery обрабатывает взаимодействие клиента
function onGridCellInputBlur(event) {
var target = $(event.target);
if (target.val() == target.next().val()) {
target.closest("td").html(target.next().val());
}
else {
doBackgroundRequest(target);
}
}
function doBackgroundRequest(descriptiveInitiator) {
var colName = descriptiveInitiator.closest("td").attr("data-col-name");
var colValue = descriptiveInitiator.val();
var entityId = descriptiveInitiator.closest("tr").attr("data-id");
var updRoute = descriptiveInitiator.closest("table").attr("data-upd-route");
$.ajax({
url: updRoute + "?entityId=" + entityId + "&colName=" + colName + "&colValue=" + colValue,
type: "POST",
success: function(p1) {
descriptiveInitiator.closest("td").html(descriptiveInitiator.val());
},
error: function (p1) {
alert(p1.Message);
}
});
}
ли какую-то работу после того, как пост на стороне сервера
public partial class GridWorker : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var entityId = Request.QueryString["entityId"];
var colName = Request.QueryString["colName"];
var colValue = Request.QueryString["colValue"];
//TODO: do some work
}
}