ASP.NET GridViewコントロールを使用すると、PageIndExchanged後にGridViewRowでコントロールまたは個々のセルを無効にするにはどうすればよいですか?
-
09-10-2019 - |
質問
データバインドされたGridViewコントロールがあり、ユーザーの役割に基づいて個々のセルを無効にすることができます。これは最初のページでのみ動作します。
private void LimitAccessToGridFields()
{
if (User.IsInRole("Processing")) return;
foreach (GridViewRow gridViewRow in gvScrubbed.Rows)
{
var checkBox = ((CheckBox) gridViewRow.FindControl("cbScrubbed"));
checkBox.Enabled = false;
// ButtonField does not have an ID to FindControl with
// Must use hard-coded Cell index
gridViewRow.Cells[1].Enabled = false;
}
}
この方法は、page_loadで動作する場所で呼び出します。 PageIndExchagingとPageIndExexhedイベントハンドラーで試してみましたが、機能しません。デバッグ中、行の両方のコントロールでfalseに有効になっていることに成功したようです。私の目標は、ページを変更した後、ユーザーの役割に応じてこれらのフィールドを無効にすることです。これはどのように達成されるべきですか?
解決 2
これは、Rowdataboundイベントハンドラーで行う必要があることがわかりました。
if (e.Row.RowType == DataControlRowType.DataRow)
{
// details elided ...
// Limits the access to grid fields.
if (!User.IsInRole("PROCESSING"))
{
cbstuff.Enabled = false; // a checkbox
e.Row.Cells[1].Enabled = false; //a link button
}
}
他のヒント
コントロールを無効にしたり、隠したり見えるようにコントロールを繰り返す必要はありません。
GridViewコントロール内のすべてのセルは、実際にはHTMLテーブルリファレンスです。
それでは、すべてのセルを繰り返して、各セル内に見つかったコントロールを繰り返して、それらを無効にするだけですか?または、グリッドビューの各行をループして直接無効または非表示にするだけで、行内のすべてに影響します。
テーブルセルの参照を使用して隠す例:
foreach (GridViewRow gRow in myGridView.Rows)
{
if (gRow.RowType == DataControlRowType.DataRow)
{
TableCellCollection tbcCol = (TableCellCollection)gRow.Cells;
foreach (TableCell tblCell in tbcCol)
tblCell.Enabled = false;
}
}
そのため、テーブルセルごとにすべてのテーブルセルが無効になります。
または..なぜ行全体を無効にしないのですか?
foreach (GridViewRow gRow in myGridView.Rows)
{
if (gRow.RowType == DataControlRowType.DataRow)
gRow.Enable = false;
}
特定のコントロールタイプ(チェックボックス、テキストボックス、ラベルなど)をピン留めまたはフィルタリングする必要があり、それらのコントロールのみにのみ影響する場合は、単にテストしてください!
foreach (GridViewRow gRow in myGridView.Rows)
{
if (gRow.RowType == DataControlRowType.DataRow)
{
TableCellCollection tbcCol = (TableCellCollection)gRow.Cells;
foreach (TableCell tblCell in tbcCol)
if (((TextBox)tblCell) != null)
((TextBox)tblCell).Enable = false;
}
}
所属していません StackOverflow