4

辞書エントリのリストを格納するクラスがあります。コードビハインドからグリッドビューのデータソースにバインドしたいと思います。

ErrorMessageとfailedフィールドを表す辞書タイプのコード。

public partial class FailedFields
{
    private Dictionary<string, string> Code_Error = new Dictionary<string, string>();
    public void AddFailedField(string field, string message)
    {
        Code_Error.Add(field, message);
    }
    public Dictionary<string, string> GetFailedFields()
    {
        return Code_Error;
    }
}

辞書エントリのリストのコード。

public partial class ErrorFieldsList
{
    private static List<Order.FailedFields> ErrorList = new List<Slab.FailedFields>();
    public void AddErrorField(Order.FailedFields errs)
    {
        ErrorList.Add(errs);
    }
    public List<Order.FailedFields> GetErrorMessages()
    {
        return ErrorList;
    }
}

Visual Studioデバッグモードで実行すると、リストにエラーリストが含まれていることを確認できますが、グリッドビューに表示できません。ベローは、リストをデータソースとして設定しようとした多くの方法の1つです(最も理にかなっている方法です)。

ErrorBoxGridView.DataSource = FailedRecords.GetErrorMessages(). ;
ErrorBoxGridView.DataBind();

私がどこで間違っているのか考えていますか?また、エラーが発生したときにのみ表示したいので、aspxページでデータソースを指定したくありません。

エラーメッセージを保存するためにこれを行っている理由に興味がある場合は、これを見てください:リンク1

ここで解決 関連の質問 ウィキで終了したら、完全なプロジェクトを文書化します。

4

4 に答える 4

3

これはできないと思います。私がすることは次のとおりです。

  1. 使用する代わりにDictionary<string, string>、フィールドとメッセージの 2 つのパブリック プロパティを含むクラスを定義します。
  2. そのクラスのオブジェクト データ ソースを作成します (Visual Studio の [データ ソース] ウィンドウを使用)。
  3. 代わりにGetErrorMessages()戻るList<ErrorClass>Dictionary
  4. そのリストをバインディング ソースに割り当てます。

編集
これは、最新のコメントに従って物事を明確にすることです。必要なのは、 1 つのエラーの情報を含む1 つのクラスです。例えば:

public class ErrorInfo
{
   public string Field { get { ... } }
   public string Message { get { ... } }
}

その後BindingSource、フォームに を配置し、(コードで) そのDataSourceプロパティをエラー メッセージ クラスのリストに設定します。例えば:

private List<ErrorInfo> errorList = new List<ErrorInfo>();
errorList.Add(new ErrorInfo() { ... });
errorList.Add(new ErrorInfo() { ... });
errorList.Add(new ErrorInfo() { ... });

bindingSource.DataSource = errorList;

データ グリッド ビューは にバインドされていBindingSourceます。これでデータが表示されるはずです。ErrorInfo列を手動で作成し、それらをクラスのそれぞれのプロパティ名に設定することもできますが、コードのどこかに設定dataGridView.AutoCreateColumnsする必要があります。false

于 2009-08-17T08:56:17.947 に答える
1

辞書のリストを GridView にデータバインドする

List<Dictionary<string,string>> resultSet = SOME List of Dictionaries...
DataGridView.DataSource = resultSet.Select(x => new { 
fieldOne = x["key1"], fieldTwo = x["key2"] 
}).ToList();
DataGridView.DataBind();

これで、DataGridView 要素で fieldOne と fieldTwo をバインドできます...

正確な回答についてはリンクをご確認ください...

ありがとう

于 2013-06-25T11:49:56.767 に答える
0

.NET は、このような場合に使用できる便利な KeyValuePair<(Of <(TKey, TValue>)>) 構造を提供します。そうすれば、独自のクラスを定義する必要はありません。HTH。

于 2009-09-23T20:04:31.403 に答える
0

または、各ディクショナリ アイテムの Value & Key プロパティにバインドすることもできます。

ErrorBoxGridView.DataSource = FailedRecords.GetErrorMessages();
ErrorBoxGridView.DataTextField = "Value";
ErrorBoxGridView.DataValueField = "Key";
ErrorBoxGridView.DataBind();
于 2012-10-25T11:26:21.473 に答える