0

MSSQLデータベースから値を取得してDataGridViewに配置するソフトウェアを作成しようとしています。これには、VisualStudioのデータバインディング機能が最適です。問題は、データベースからの情報がコントロールに到達する前にフォーマット/操作したいということです。

たとえば、あるデータベーステーブルには、整数を含むUserTypeIDというエントリがあり、別のテーブルは、UserTypeIDを「Admin」、「Operator」、「Guest」などの文字列UserTypeにマップします。最初のテーブルのUserTypeIDを、2番目のテーブルを介して同等の文字列に変換し、その結果をDataGridViewに渡します。

これを行うための合理的に簡単な方法はありますか、それとも中間オブジェクトなどを必要とするものですか?

4

3 に答える 3

0

@Tyrsiusが提案したことを行うことができます。ただし、オブジェクトのコレクションをデータソースとして使用している場合は、そのプロパティのGETメソッドで操作を行うことができます。それが私がすることです!

于 2012-06-22T23:42:19.407 に答える
0

文字列が静的である場合(ユーザーが追加/削除しない)、最も簡単な方法は、文字列のリスト<>または配列と、このような小さな拡張メソッドを作成することです。

string[] m = new string[] { "Guest", "Admin", "Operator", "Unit Manager", "User" }

/// <summary>
/// 
/// </summary>
/// <param name="m">the string array which searches for the integer criteria.</param>
/// <param name="s"> the int32 number which will pass to the index of the array </param>
/// <returns></returns>
public static string IntToString( this string S, string[] m, int s)
{
    string z = m.ElementAt(s);
    //Array.Clear(m, 0, m.Length);

    /// if you will need to clear the string array elements each using of this method then delete the comment slashes in front of the Array.Clear() method

   /// in Array.Clear method also -to depends of your need- you can disable to show the
   /// Array elements.. May be you will need only 1 admin and if an admin chooosen you can delete this option by changing the parameters of Array.Clear() Method

    return z;
} 

およびデータアクセス層クラスでの簡単な使用例:

string g;

if (dataReader["yourIntValueFromTable"] != DBNull.Value)
{                           
   yourClassObject.yourIntValueFromTable = (int)dataReader["yourIntValueFromTable"]; 

   yourClassObject.yourStringValue = g.IntToString(m, ((int)dataReader["yourIntValueFromTable"]));

}

このクラスに入力した後、必要な場所にデータソースとして設定できます。

ただし、文字列が動的である場合は、ストアドプロシージャを作成し、そこから値を呼び出す必要があります

于 2012-06-22T23:43:40.500 に答える
-1

SQLから必要な結合を実行し、返された結果に必要な列を含めます

SELECT u.userID, u.userName, u.userTypeID, ut.userTypeName
FROM Users u
JOIN UserType ut ON u.userTypeID = ut.userTypeID

これにより、datagridviewで必要な追加の列が得られます。DataTableを使用している場合は、可変数の列を含めることができるため、これは簡単です。datatableをdatagridviewにBingするだけです

オブジェクトのコレクションには、追加のプロパティがあります。

class User
{
    int UserTypeId { get; set; }
    string UserTypeName { get; set; } // this could also be readonly depending on how you want it set
}
于 2012-06-22T23:36:32.467 に答える