行を選択できるGridViewがあります。次に、グリッドの上に[編集]というボタンがあり、ユーザーはこのボタンをクリックしてウィンドウをポップアップし、選択した行を編集できます。したがって、ボタンの後ろには、次の行に沿ってJavascriptコードがあります。
function editRecord()
{
var gridView = document.getElementById("<%= GridView.ClientID %>");
var id = // somehow get the id here ???
window.open("edit.aspx?id=" + id);
}
問題は、選択したレコードIDをjavascriptで取得するにはどうすればよいですか?
JasonSの応答に基づいて解決しました。私がしたことは、次のようにグリッドビューに非表示フィールドを作成することでした。
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:HiddenField ID="hdID" runat="server" Value='<%# Eval("JobID") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField Visible="False">
<ItemTemplate>
<asp:LinkButton ID="lnkSelect" runat="server" CommandName="select" Text="Select" />
</ItemTemplate>
</asp:TemplateField>
次に、OnRowDataBindに、選択した行を設定するコードがあります
protected virtual void Grid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// Click to highlight row
Control lnkSelect = e.Row.FindControl("lnkSelect");
if (lnkSelect != null)
{
StringBuilder click = new StringBuilder();
click.AppendLine(m_View.Page.ClientScript.GetPostBackClientHyperlink(lnkSelect, String.Empty));
click.AppendLine(String.Format("onGridViewRowSelected('{0}')", e.Row.RowIndex));
e.Row.Attributes.Add("onclick", click.ToString());
}
}
}
そして、Javascriptにはこのようなコードがあります
<script type="text/javascript">
var selectedRowIndex = null;
function onGridViewRowSelected(rowIndex)
{
selectedRowIndex = rowIndex;
}
function editItem()
{
if (selectedRowIndex == null) return;
var gridView = document.getElementById('<%= GridView1.ClientID %>');
var cell = gridView.rows[parseInt(selectedRowIndex)+1].cells[0];
var hidID = cell.childNodes[0];
window.open('JobTypeEdit.aspx?id=' + hidID.value);
}
</script>
御馳走を動作します:-)
1)パラメータを使用するようにJavaScript関数を変更します
function editRecord(clientId)
{ ....
2)editRecordボタンで呼び出しを出力します... .netで生成されたIDの処理を避けたい場合は、単純なものを使用してください
<input type="button" onclick="editRecord(your-rows-client-id-goes-here)" />
@DaveKの応答に対するコメントに基づいて、javascriptでは、ユーザーが選択したときに、非表示フィールドのIDを選択した行のclientIdに設定できます。次に、editRecord関数に非表示のフォームフィールドに設定された値を使用させます。
各行のクエリ文字列が事前に入力されたアンカータグを設定することで、JavaScriptを完全に回避できます(これはテーブルレイアウトに影響しますが、ユーザーが2回クリックするのではなく、1回クリックするだけで済みます)。
グリッドビューテンプレートに挿入します。
<asp:HyperLink runat="server" ID="editLink" Target="_blank"
NavigateURL='<%# Eval("JobID","edit.aspx?id={0}") %>'>
Edit..
</asp:HyperLink>