これが、GridViewコントロールにデータを入力する方法です。これは、.aspxフロントエンドからではなく、コードビハインドから行っています。以下は私が持っているものの極端に省略されたバージョンです:
private void UpdateGridView()
{
DataTable temptable = new DataTable();
DataColumn idcol = new DataColumn();
DataColumn titlecol = new DataColumn();
idcol.ColumnName = "ID";
titlecol.ColumnName = "Title";
temptable.Columns.Add(idcol);
temptable.Columns.Add(titlecol);
...(get data from the database, store it as variable "x")...
DataRow tempdr;
tempdr[idcol] = x.ID;
tempdr[titlecol] = x.Title;
temptable.Rows.Add(tempdr);
GridView1.DataSource = temptable;
GridView1.DataBind();
}
GridViewの「AllowPaging」をtrueに設定してページングを処理するには、次のイベントハンドラーがあります。
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
UpdateGridView();
}
そして、これはうまくいきます!
ただし、RowDataBoundイベントハンドラーもあります。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[0].Visible = false; //hide the ID
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes["onmouseover"] = "this.style.cursor='pointer';this.style.textDecoration='underline';";
e.Row.Attributes["onmouseout"] = "this.style.textDecoration='none';";
e.Row.Attributes["onclick"] = "location.href='newsindex.aspx?NewsArticleID=" + e.Row.Cells[0].Text + "'";
}
}
ここでの私の目標は、行自体をクリック可能にし、その行のIDと等しいクエリ文字列を持つ別のページに移動することです。行を作成するときにID列にアクセスできるように、ID列の値が必要です。これにより、リンクのQueryStringにIDを追加できます。ただし、ID列を表示したくないので、次の行に追加しましたe.Row.Cells[0].Visible = false;
。これを行うと、ページング機能が機能しなくなります。ページ番号は表示されなくなります。この1行をコメントアウトすると、すべて機能しますが、IDはGridViewに表示されます。
1)なぜですか?2)同じ機能を取得するために何ができますか?ただし、可能な限り変更を最小限に抑えますか?