ログインユーザーIDに基づいてデフォルト値を設定および表示したいドロップダウンリスト(FK)があります。やり方を教えていただけますか?グリッドビューの上部に表示されるドロップダウンフィルターにのみ影響を与えたい。
ありがとう
ニコス
ログインユーザーIDに基づいてデフォルト値を設定および表示したいドロップダウンリスト(FK)があります。やり方を教えていただけますか?グリッドビューの上部に表示されるドロップダウンフィルターにのみ影響を与えたい。
ありがとう
ニコス
これは普遍的な変更ですか、それとも1つの外部キー関係のためだけですか?
1つの外部キー関係のみであると仮定すると、その関係にのみ使用される新しいFieldTemplateを作成できます。New FieldTemplateは、デフォルトの「ForeignKey」FieldTemplateのコピーになります。New FieldTemplateで、OnDataBinding(またはPage_PreRender)イベントを変更して、DropDownListの「デフォルト値」を設定します。
次に、その関係にNew FieldTemplateを強制的に使用するには、System.ComponentModel.DataAnnotationsを使用する必要があります。その外部キー関係を表すエンティティクラスのメンバーのUIHint属性。(以下のリンク)
http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.uihintattribute.uihint.aspx またはhttp://www.asp.net/learn/3.5-SP1/video-291.aspx( 07:30頃)
少し助けが必要な場合は、CodePlexのDynamicDataFuturesリリースをご覧ください。具体的には、「フィルターからの値を使用して挿入テンプレートにデータを入力する」セクションです。http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=14475
私は回避策を見つけましたが、よりエレガントな解決策を受け入れています。
PopulateListControl(DropDownList1);の後にPage_Initに次の行を挿入して、FilterUserControl.ascx.csを編集しました。
DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByText( "Bob")); //ユーザー名はテスト用にハードコードされています
これは機能しているようですが、可能であれば、メタデータを含むカスタムの部分エンティティクラスを使用してこれを解決することをお勧めします。
[フィルター基準]セクションに表示されるドロップダウンリストでこの機能のみが必要な場合は、フィルター処理するQueryStringパラメーターを追加してURLを変更するだけです。DynamicFilterは、QueryStringから値を取得し、それに応じてDropDownリストを設定します。(fyi。これはForeignKey.ascx FieldTemplateが提供するのと同じ機能です)
(文字列を使用する代わりに)実際にこのURLを作成するより良い方法があればいいのですが、現時点では、私が提供するソリューションは、おそらく次のバージョンで機能しなくなるでしょう。
例(page_load内)
Response.Redirect("~/Employees/List.aspx?ReportsTo=1234");
これは、作業中のアプリケーションで、背後にある挿入ビューテンプレートコードで解決しました。詳細ビューのItemCreatedイベントで:
foreach (DetailsViewRow row in DetailsView1.Rows)
{
foreach (Control ctl in row.Controls)
foreach (Control c in ctl.Controls)
foreach (Control x in c.Controls)
{
if (x.ClientID.Contains("tblName"))
{
foreach (Control y in x.Controls)
{
if (y.ClientID.Contains("DropDownList"))
{
ddl = y as DropDownList;
ddl.SelectedValue = Convert.ToString(UserId);
ddl.Enabled = false;
}
}
}
}
}
このコードでは、ユーザーがログインしてエンティティ(tblName)を挿入しようとすると、ドロップダウンリスト(fkからuserId)が既に選択され、無効になっています。