asp.Netgridviewでクリックセルイベントを追加
15225 ワード
実装機能:表のセル(最初の列、最後の列、最後の行ではなく0)をクリックして、行の最初のセルの内容と列名に基づいて詳細を問合せ、メッセージ・ボックスに表示します.
コードに追加
参考資料:原文http://www.codeproject.com/Articles/18136/Edit-Individual-GridView-Cells-in-ASP-NET翻訳:webabcd
GridViewには、「SingleClick」というGridViewの最初の列にある非表示asp:ButtonFieldコントロールがあります.GridViewのデータ行にクリックイベントを追加します.
RowDataBoundイベント内で各データ行の各セルにループしてクリックイベントを追加します.データ行のセルのインデックスをイベントパラメータとして使用すると、セルがイベントをクリックすると、どのセルがクリックされたのかがわかります.
コマンドパラメータとイベントパラメータをRowCommandイベント内で読み出します.選択した行と列のインデックスを示します.
検証のために、RowDataBoundで作成されたカスタムイベントを登録するには、ページに登録する必要があります.Renderメソッドを書き換えることでClientScriptManagementを呼び出す.RegisterForEventValidation.GridView.UniqueIDは行の一意IDを返し、ボタンの一意IDは行の一意IDに「$ct 100」を付加して生成される.
これにより、無効なコールバックパラメータまたはコールバックパラメータのエラーが防止されます.
コードに追加
protected override void Render(HtmlTextWriter writer)
{
foreach (GridViewRow r in GridViewTzx.Rows)
{
if (r.RowType == DataControlRowType.DataRow)
{
for (int columnIndex = 1; columnIndex < r.Cells.Count; columnIndex++)//(int columnIndex = _firstEditCellIndex; columnIndex < r.Cells.Count; columnIndex++)
{
Page.ClientScript.RegisterForEventValidation(r.UniqueID + "$ctl00", columnIndex.ToString());
}
}
}
base.Render(writer);
}
protected void GridViewTzx_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// LinkButton
LinkButton _singleClickButton = (LinkButton)e.Row.Cells[7].Controls[0];
// , ID JavaScript
string _jsSingle = ClientScript.GetPostBackClientHyperlink(_singleClickButton, "");
//
for (int columnIndex = 1; columnIndex < e.Row.Cells.Count-2; columnIndex++)//int columnIndex = _firstEditCellIndex; columnIndex < e.Row.Cells.Count; columnIndex++)
{
//
string js = _jsSingle.Insert(_jsSingle.Length - 2, columnIndex.ToString());
// onclick
e.Row.Cells[columnIndex].Attributes["onclick"] = js;
//
e.Row.Cells[columnIndex].Attributes["style"] += "cursor:pointer;cursor:hand;";
}
}
}
protected void GridViewTzx_RowCommand(object sender, GridViewCommandEventArgs e)
{
string sXianghaos = "";
int _rowIndex = int.Parse(e.CommandArgument.ToString());
int _columnIndex = int.Parse(Request.Form["__EVENTARGUMENT"]);
if (GridViewTzx.Rows[_rowIndex].Cells[0].Text != " " && GridViewTzx.Rows[_rowIndex].Cells[_columnIndex].Text != "0" && _columnIndex < 6 && _columnIndex > 0)
{
string sGk = GridViewTzx.Columns[_columnIndex].HeaderText;
string sXx = GridViewTzx.Rows[_rowIndex].Cells[0].Text;
string sSubCmd = "id in (select max(id) as id from jzx_active group by xianghao) and XIANGHAO in (select boxno from boxnumber where boxtypeid = (select id from boxtype where type ='"+sXx+"') )";
string sCmd = "";
sCmd = "select xianghao from jzx_active where (QYG like'" + sGk + "%' or MDG like'" + sGk + "%') and " + sSubCmd ;
if (sGk==" ")
{
sCmd = "SELECT xianghao from jzx_active where ZHUANGTAI='" + sGk + "' and " + sSubCmd;
}
MySqlDataReader reader = null;
mySqlMod newMySqlMod = new mySqlMod();
newMySqlMod.RunSQL(sCmd, out reader);
if (reader.HasRows)
{
while (reader.Read())
{
sXianghaos += reader[0].ToString();
sXianghaos += ",";
}
sXianghaos = sXianghaos.TrimEnd(',');
CommData.MessageBoxAsyncPostBack(this, GetType(), sXianghaos);
}
reader.Close();
}
}
参考資料:原文http://www.codeproject.com/Articles/18136/Edit-Individual-GridView-Cells-in-ASP-NET翻訳:webabcd
GridViewには、「SingleClick」というGridViewの最初の列にある非表示asp:ButtonFieldコントロールがあります.GridViewのデータ行にクリックイベントを追加します.
<Columns>
<asp:ButtonField Text="SingleClick" CommandName="SingleClick"
Visible="False" />
</Columns>
RowDataBoundイベント内で各データ行の各セルにループしてクリックイベントを追加します.データ行のセルのインデックスをイベントパラメータとして使用すると、セルがイベントをクリックすると、どのセルがクリックされたのかがわかります.
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// LinkButton
LinkButton _singleClickButton = (LinkButton)e.Row.Cells[0].Controls[0];
// , ID JavaScript
string _jsSingle = ClientScript.GetPostBackClientHyperlink(_singleClickButton, "");
//
for (int columnIndex = _firstEditCellIndex; columnIndex < e.Row.Cells.Count; columnIndex++)
{
//
string js = _jsSingle.Insert(_jsSingle.Length - 2, columnIndex.ToString());
// onclick
e.Row.Cells[columnIndex].Attributes["onclick"] = js;
//
e.Row.Cells[columnIndex].Attributes["style"] += "cursor:pointer;cursor:hand;";
}
}
}
コマンドパラメータとイベントパラメータをRowCommandイベント内で読み出します.選択した行と列のインデックスを示します.
int _rowIndex = int.Parse(e.CommandArgument.ToString());
int _columnIndex = int.Parse(Request.Form["__EVENTARGUMENT"]);
検証のために、RowDataBoundで作成されたカスタムイベントを登録するには、ページに登録する必要があります.Renderメソッドを書き換えることでClientScriptManagementを呼び出す.RegisterForEventValidation.GridView.UniqueIDは行の一意IDを返し、ボタンの一意IDは行の一意IDに「$ct 100」を付加して生成される.
protected override void Render(HtmlTextWriter writer)
{
foreach (GridViewRow r in GridView1.Rows)
{
if (r.RowType == DataControlRowType.DataRow)
{
for (int columnIndex = _firstEditCellIndex; columnIndex < r.Cells.Count; columnIndex++)
{
Page.ClientScript.RegisterForEventValidation(r.UniqueID + "$ctl00", columnIndex.ToString());
}
}
}
base.Render(writer);
}
これにより、無効なコールバックパラメータまたはコールバックパラメータのエラーが防止されます.