ciao spero non sia troppo tardi ma volevo risponderti prima che sparisca a causa matrimonio
ecco un esempio funzionante
<%@ Page Language="C#" Trace="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
private bool _loadComplete = false;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (!IsPostBack)
{
BindGrid();
}
}
protected override void OnLoadComplete(EventArgs e)
{
base.OnLoadComplete(e);
_loadComplete = true;
}
private void BindGrid()
{
string _connectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter("SELECT [CompanyName], [ContactName], [Address], [PostalCode], [CustomerID] FROM [Customers]", _connectionString);
System.Data.DataSet ds = new System.Data.DataSet();
da.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
BindGrid();
}
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow & _loadComplete)
{
Response.Write(GridView1.DataKeys[e.Row.DataItemIndex][0]);
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" DataKeyNames="CustomerID"
PageSize="10" AllowPaging="true"
onpageindexchanging="GridView1_PageIndexChanging"
onrowcreated="GridView1_RowCreated">
</asp:GridView>
</div>
</form>
</body>
</html>
in pratica l'errore si verificava perche la prima volta le righe sono create utilizzando i dati presenti nel ViewState e solo dopo con i nuovi dati.
allora per ovviare ho eseguito l'ovveride del metodo OnLoadComplete li imposto un campo di tipo bool per memorizzare che la griglia è stata correttamente ricreata.
nel event handler GridView1_RowCreated oltre che a controllare il tipo di riga controllo anche questo campo
ciao e buon lavoro
marco