列テンプレートを使用すれば、ユニークなルック アンド フィールで列を作成できます。コントロールをテンプレートに追加できます。WebDataGrid™ のテンプレート列は、ヘッダー、フッター、項目、代替え項目テンプレートの 4 つのテンプレートで構成されます。
WebDataGrid で列に項目テンプレートを設定する方法を学びます。このテンプレートには、行を変更または削除するための 2 つのリンク ボタンが含まれます。
WebDataGrid を SqlDataSource コンポーネントにバインドして、Customers テーブルからデータを取得します。実行についての詳細は、 WebDataGrid で開始を参照してください。
Microsoft® Visual Studio™ プロパティ ウィンドウで、 Columns プロパティを指定して、省略記号 (…) ボタンをクリックして、[列エディタ] ダイアログを起動します。
TemplateField の下の [有効なフィールド] セクションで列を選択し、[フィールドの追加] ボタンをクリックしてテンプレート列を追加します。 Key を TemplateColumn1 に、 Header Text を Edit に設定します。[選択されたフィールド] セクションからテンプレート列として使用したい列を選択し、[選択されたグリッド フィールドをテンプレート フィールドに変換する] リンクをクリックすることも可能です。
テンプレート列をコードで追加することもできます。 コードは最初のロードでページの Init イベントで実行されます。
Visual Basic の場合:
Dim field1 As New TemplateDataField() field1.Key = "TemplateColumn1" field1.Header.Text = "Edit" Me.WebDataGrid1.Columns.Add(field1)
C# の場合:
TemplateDataField field1 = new TemplateDataField(); field1.Key = "TemplateColumn1"; field1.Header.Text = "Edit"; this.WebDataGrid1.Columns.Add(field1);
[OK] をクリックしてエディタを終了します。
WebDataGrid を右クリックします。コンテキスト メニューから [テンプレートの編集] をマウスオーバーし、追加したばかりの列テンプレートを選択します。テンプレートがデザイナに表示されます。
2 つの LinkButton コントロールを [項目テンプレート] 領域にドラッグします。
これらのボタンの Text プロパティを Edit および Delete に設定します。
OnClientClick プロパティを使用してボタンのクライアント側のクリック イベントにハンドラを設定します。
編集ボタンでは、プロパティを "return editRow()" に等しく設定します。
削除ボタンでは、プロパティを "return deleteRow()" に等しく設定します。
HTML の場合:
<asp:LinkButton ID="LinkButton1" runat="server" onclientclick="return editRow()">Edit</asp:LinkButton> <br /> <asp:LinkButton ID="LinkButton2" runat="server" onclientclick="return deleteRow()">Delete</asp:LinkButton>
ITemplate インタフェースを実装するクラスを作成してコードで上記の手順を実行し、列の ItemTemplate プロパティにそのインスタンスを設定できます。 このサンプルで、テンプレートのインスタンス化はページの PreRender イベントで実行されます。
注: : テンプレートをポストバックごとに再作成する必要があります。したがって、ポストバックごとに以下のコードを実行する必要があります。
Visual Basic の場合:
'テンプレート列への参照を取得します。
Dim templateColumn1 As TemplateDataField = DirectCast(Me.WebDataGrid1.Columns("TemplateColumn1"), TemplateDataField)
templateColumn1.ItemTemplate = New CustomItemTemplate()
Private Class CustomItemTemplate
Implements ITemplate
#Region "ITemplate Members"
Public Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn
Dim edit As New LinkButton()
edit.ID = "EditButton"
edit.Text = "Edit"
edit.OnClientClick = "return editRow()"
Dim delete As New LinkButton()
delete.ID = "DeleteButton"
delete.Text = "Delete"
delete.OnClientClick = "return deleteRow()"
container.Controls.Add(edit)
container.Controls.Add(delete)
End Sub
#End Region
End Class
C# の場合:
//テンプレート列への参照を取得します。
TemplateDataField templateColumn1 = (TemplateDataField)this.WebDataGrid1.Columns["TemplateColumn1"];
templateColumn1.ItemTemplate = new CustomItemTemplate();
private class CustomItemTemplate : ITemplate
{
#region ITemplate Members
public void InstantiateIn(Control container)
{
LinkButton edit = new LinkButton();
edit.CssClass = "LinkButton";
edit.Text = "Edit";
edit.OnClientClick = "return editRow()";
LinkButton delete = new LinkButton();
delete.CssClass = "LinkButton";
delete.Text = "Delete";
delete.OnClientClick = "return deleteRow()";
container.Controls.Add(edit);
container.Controls.Add(delete);
}
#endregion
}
編集および削除に関数を追加します。
JavaScript の場合
function editRow() {
var grid = $find("WebDataGrid1");
// アクティブな行を取得します。
var activeRow = grid.get_behaviors().get_activation().get_activeCell().get_row();
// アクティブな行の最初のセルを編集モードにします。
grid.get_behaviors().get_editingCore().get_behaviors().get_cellEditing().enterEditMode(activeRow.get_cell(0));
// リンク ボタンから自動ポストバックをキャンセルします。
return false;
}
function deleteRow() {
var grid = $find("WebDataGrid1");
// アクティブな行を削除します。
grid.get_rows().remove(grid.get_behaviors().get_activation().get_activeCell().get_row());
// リンク ボタンから自動ポストバックをキャンセルします。
return false;
}
注: ボタンは WebDataGrid を変更するために機能するので、 EditingCore 動作を有効にする必要があります。これを行う詳細は、 WebDataGrid を編集 を参照してください。 Activation 動作も必要です。詳細は、 アクティブ化を参照してください。
注: 項目テンプレートは項目のセル内では HTML に過ぎないため、HTML の編集を防ぐために列を必ず読み取り専用にします。これを実行することによってエンド ユーザーはテンプレートで任意のエディタを使用して編集することが可能となりますが、テンプレートの実際的なマークアップを編集できません。動作の列設定の追加の詳細は、 動作に列設定を設定 を参照してください。
アプリケーションを実行します。WebDataGrid には行の編集および削除を処理する 2 つのリンク ボタンが表示される列があります。