2016-07-30 20 views
0

私は<asp:FormView ID="FormView1" runat="server">を持っています。FormViewにバインドされたフィールドの値を取得する方法

私のコードビハインドでは、Page_LoadではSQLデータソースをFormView1にバインドします。

FormView1.DataBind();の直後にPage_LoadのDataSourceのフィールドの1つの値にアクセスする必要があります。

ローカルウィンドウのデバッグ中に、FormView1のDataItemプロパティのすべてのフィールドが表示されます。

しかし、これらのフィールドの値にアクセスするコードはわかりません。

注:このフィールドはフォームでは使用されていません。 asp:ラベルの表示/非表示を設定するには、その価値が必要です。

FormView1.DataSource = from prop in dataContext.Properties 
    join sub in dataContext.SuburbsWithProperties on prop.SuburbID equals sub.SuburbID 
    where prop.PropertyID == propNo 
    select new 
    { 
     prop.PropertyID, 
     prop.SuburbID, 
     prop.Rent, 
    etc 
} 

**** ConnorsFanの助けを借りて、フィールド値を取得することができました。

var dataItem = formView1.DataItem as object; 
var dataItemFields = dataItem.GetType().GetProperties().ToDictionary(x => x.Name, x => x.GetValue(dataItem, null)); 
    var fieldValue = (string)dataItemFields["MyFieldName"]; 

答えて

-1

(以下の提案は、データ・ソースは、LINQクエリであることを示している、質問の更新後、有効ではありません)

あなたがその実際のタイプにDataItemをキャストすることができますDataRowView。ラベルは、FormViewコントロールに属している場合は、データバインディング式でマークアップで視界条件を設定することができ、一方、

DataRowView drv = FormView1.DataItem as DataRowView; int ID = (int)drv["ClientID"]; string name = (string)drv["ClientName"];


:あなたは、各フィールドの値にアクセスすることができます:

フィールドにはブール値が含まれている場合:フィールドに文字列が含まれている場合

<asp:Label runat="server" Visible='<%# Eval("fieldName") %>' ... /> 

を:

<asp:Label runat="server" Visible='<%# Eval("fieldName") == "Some value" %>' ... /> 
+0

残念ながら、 'DataRowView drv = FormView1.DataItem as DataRowView;はnullを返します。デバッグで 'FormView1.DataItem'はdefintielyです。 – ThomasAJ

+0

ありがとうConnorsFan、私はあなたの他の提案と一緒に ''これであまりにも長い間私の頭を打つ。しかし、私はまだ私の質問を働かせたいです。 – ThomasAJ

+0

LocalsにFormView1.DataItemがある場合、そのデータ型が表示されます。それは何ですか? DataRowViewではありませんか?あなたはあなたの質問に地元のウィンドウの画像を挿入することができます。 – ConnorsFan

関連する問題