Не может найти контроль по идентификатору во время RowDataBound
Я создал динамическое сеточное представление и хочу назначить границу строки и SelectedIndexChanged сетке.
ниже мой код HTML
<div id="divGridView" runat="server"></div>
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
buildGridView();
}
}
public void buildGridView()
{
GridView gvSample = new GridView();
gvSample.ID = "gvSample";
gvSample.AutoGenerateColumns = false;
gvSample.RowDataBound += gvSample_RowDataBound;
gvSample.SelectedIndexChanged += gvSample_SelectedIndexChanged;
DataTable dt = new DataTable();
DataColumn dc = new DataColumn();
BoundField BoundField1 = new BoundField();
BoundField1.DataField = "BoundField11";
gvSample.Columns.Add(BoundField1);
if (dt.Columns.Count == 0)
{
dt.Columns.Add("BoundField11", typeof(string));
}
DataRow NewRow = dt.NewRow();
NewRow[0] = "sample data";
dt.Rows.Add(NewRow);
gvSample.DataSource = dt;
gvSample.DataBind();
divGridView.Controls.Add(gvSample);
}
protected void gvSample_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
GridView gvSample = (GridView)Page.FindControl("gvSample");
e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(gvSample, "Select$" + e.Row.RowIndex);
e.Row.Style["cursor"] = "pointer";
}
}
protected void gvSample_SelectedIndexChanged(object sender, EventArgs e)
{
// do something
}
Мой элемент поиска в RowDataBound всегда возвращает нулевое значение. код работает, если я создаю элемент управления gridview в HTML. Я НЕ использую какую-либо главную страницу.
1 ответ
buildGridView(); это сборка в GET. но, когда у вас есть транзакция, отправьте обратно. это фактически обрабатывает снова на жизненном цикле жереха. Вы можете поместить ваш datalist в viewstate и удалить!ispostback(), поэтому, когда вы выполняете обратную передачу, ваша сетка данных фактически не является сборкой, поэтому имеет значение null.