1

いくつかの ItemTemplates を持つ gridview があります。最初のものにはチェックボックスが含まれ、残りにはテキストボックスが含まれます。

次に、次のようなバインドされたコントロールを動的に追加しました。

BoundField bdfPrivName = new BoundField();
clsUtilities.SetBoundFieldCenter(ref bdfPrivName, "PrivName", "Priv Name");

BoundField bdfDescription = new BoundField();
clsUtilities.SetBoundFieldLeft(ref bdfDescription, "PrivDesc", "Description");

BoundField bdfLive = new BoundField();
clsUtilities.SetBoundFieldCenter(ref bdfLive, "Live","Active?");

grdExisting.Columns.Add(bdfPrivName);
grdExisting.Columns.Add(bdfDescription);
grdExisting.Columns.Add(bdfLive);

次に、FindControl() を使用してチェックボックスとテキストボックスを見つけ、結果に基づいてロジックを実行します

foreach (GridViewRow gvr in grdMissing.Rows)
{ 
    mckbAny = (CheckBox)gvr.FindControl("ckbAdd");
    mtxtApplyDate = (TextBox)gvr.FindControl("txtAddApplyDate");
    mtxtDateToAdd = (TextBox)gvr.FindControl("txtAddDateToAdd");
    mtxtDateToRemove = (TextBox)gvr.FindControl("txtAddDateToRemove");
}

これはすべてうまくいきました。次に、バインドされたフィールドを 2 列目、3 列目、4 列目、チェック ボックスの後、テキスト ボックスの前に配置するように要求されました。Add を Inserts に次のように変更することで、これは簡単に実行できることがわかりました。

grdExisting.Columns.Insert(1, bdfPrivName);
grdExisting.Columns.Insert(2, bdfDescription);
grdExisting.Columns.Insert(3, bdfLive);

ページは問題ないように見えましたが、FindControl() はすべて機能しません。

解決策または回避策を提案してください。

前もって感謝します。

4

2 に答える 2

1

このバグに遭遇したようです。

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=104994&wa=wsignin1.0

BoundFieldがGridViewに挿入されたとき、ViewStateは保存(または復元)されていないようです。したがって、FindControlを実行すると、それは存在しません。

以前と同じようにそれらを追加して、列を再配置する方法を見つけることができます(これは可能だと思います)。

于 2010-11-11T14:24:03.033 に答える
-1

コントロールは行に属しておらず、セル内にあるため、以前はどのように機能していたのかわかりません。とにかく、問題は、FindControl が再帰的ではないことです。コントロール ツリー全体を検索するのではなく、実行するコントロールの直接の子のみを検索します。たとえば、次のように、独自の再帰的 findcontrol を実装する必要があります。

public static Control FindControlRecursive(Control Root, string Id)
{
  if (Root.ID == Id)
    return Root;
  foreach (Control c in Root.Controls)
  {
    Control fc = FindControlRecursive(c, Id);
    if (fc != null)
      return fc;
  }
  return null;
}
于 2010-11-08T22:47:34.487 に答える