VB.NETからC#:オブジェクトでデータバインディングメソッドの使用
-
25-10-2019 - |
質問
VB.NETでは、データバインディンググリッドビュー/ドロップダウンリスト/などの2つの速記関数を作成しました(DataReader、Ireader、Collectionなど)。
Public Shared Sub BindObject(ByVal objDataSource As Object, ByVal objItem As Object)
objItem.DataSource = objDataSource
objItem.DataBind()
End Sub
Public Shared Sub BindObject(ByVal objDataSource As Object, ByVal objItem As Object, ByVal sTextField As String, ByVal sValueField As String)
objItem.DataSource = objDataSource
If sTextField <> "" Then objItem.DataTextField = sTextField
If sValueField <> "" Then objItem.DataValueField = sValueField
objItem.DataBind()
End Sub
これをC#に変換しました。
public static void BindObject(object objDataSource, object objItem)
{
objItem.DataSource = objDataSource;
objItem.DataBind();
}
public static void BindObject(object objDataSource, object objItem, string sTextField, string sValueField)
{
objItem.DataSource = objDataSource;
if (!string.IsNullOrEmpty(sTextField))
objItem.DataTextField = sTextField;
if (!string.IsNullOrEmpty(sValueField))
objItem.DataValueField = sValueField;
objItem.DataBind();
}
しかし、これは明らかに、データバインディング方法にアクセスできないため、明らかに機能しません objitem, 、私が「リストボックス」や「グリッドビュー」などのタイプに説明しない限り、同様に、柔軟性を保持したい objdatasource iReader、Icollectionなどのいずれかです。
匿名の方法などを使用してC#でVB.NETアプローチを複製することは可能ですか?
ありがとう。
解決
「var」匿名タイプを使用するか、ケースステートメントを入力して、着信オブジェクトがどのタイプであるかを確認できます。
-編集-
あなたは正しいです、VARはここでは実行可能ではないようです。代わりにこのソリューションを試してください:
public void BindObject(object objDataSource, object objItem)
{
(objItem as BaseDataBoundControl).DataSource = objDataSource;
(objItem as BaseDataBoundControl).DataBind();
}
よろしく、ポール
他のヒント
VBコードでは、オプションの厳格な電源がオフになっています。 TSK TSK - それは本当に最良の選択ではありません。
C#で同様の効果を得るには、これを行うことができます。
public static void BindObject(object objDataSource, dynamic objItem)
{
objItem.DataSource = objDataSource;
objItem.DataBind();
}
public static void BindObject(object objDataSource, dynamic objItem, string sTextField, string sValueField)
{
objItem.DataSource = objDataSource;
if (!string.IsNullOrEmpty(sTextField))
objItem.DataTextField = sTextField;
if (!string.IsNullOrEmpty(sValueField))
objItem.DataValueField = sValueField;
objItem.DataBind();
}
しかし、繰り返しますが、強力なコンパイルタイプのチェックを保持するこれを行う方法を本当に検討する必要があります。
所属していません StackOverflow