質問

リストビューがあります。私のリストビューには、コードビハインドページに入力するドロップダウンボックスがあります。唯一のことは、このwebcontrolにアクセスする方法がわかりません。以下は機能しません:

DropDownList ddl = (DropDownList)lvUserOverview.Controls[0];

ドロップダウンリストがリストビューの唯一のコントロールであるため、インデックスが0であることを知っています(インデックス1を試すときに、範囲外のインデックスを取得します)。

ドロップダウンリストにアクセスする方法を教えてもらえますか?背後のページで、リストアイテムを追加します。

ASPXコード:

<asp:DropDownList ID="ddlRole" onload="ddlRole_Load" runat="server">
</asp:DropDownList>

コードビハインド:

protected void ddlRole_Load(object sender, EventArgs e)
{
  DropDownList ddl = (DropDownList)lvUserOverview.FindControl("ddlRole");
  if (ddl != null)
  {
      foreach (Role role in roles)
          ddl.Items.Add(new ListItem(role.Description, role.Id.ToString()));
  }
}
役に立ちましたか?

解決

独自のLoadイベントハンドラー内のドロップダウンリストへのハンドルを取得するには、送信者をDropDownListとしてキャストするだけです。

DropDownList ddlRole = sender as DropDownList;

他のヒント

これがListViewでレンダリングされている場合、複数のDropDownListがインスタンス化される可能性があり、それぞれが一意のIDを取得し、Matthewのアプローチを使用できなくなります。

ItemDataBoundイベントを使用してe.Item.FindControl(&quot; NameOfDropDownList&quot;)にアクセスすると、作成された各ドロップダウンを繰り返すことができます。

作成するのが1つだけの場合...なぜListViewにあるのですか?

これを試してください:

DropDownList ddl = (DropDownList)lvUserOverview.FindControl("NameOfDropDownList");

コントロールがデータバインドされている場合は、データバインド後に子孫にアクセスしてください。また、その行の前にデバッガでオブジェクトを検査することもできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top