0

2列のListViewがあります。例として、次のようにします。

ColA    | ColB  
-----------------
001     |  
002     |  
003     |  
004     |  
005     |  

次の行を含むテキスト ファイルがあります。

001  
002  
004  
005  
008  

ファイルを 1 行ずつ読み込もうとしています。数値が ColumnA の数値と一致する場合は、それを ColumnB に追加します。それはうまくいきます(以下の私の例を見てください)。ただし、一致しないものも新しい ListViewItem として追加したいと思います。私はその部分を理解することはできません。これが私がこれまでに持っているものです:

foreach (string textfileitem in TheTextFile)
{
    foreach (ListViewItem item in ListView1.Items)
    {
        var existingitem = item.SubItems[0];

        if (existingitem.Text == textfileitem)
        {
            item.SubItems[1].Text = textfileitem;
        }
    }
}

不一致を処理して ListView に追加する方法がわかりません。最終結果は次のようになります。

ColumnA | ColumnB
----------------- 
001     | 001
002     | 002
003     | 
004     | 004
005     | 005
-       | 008

いつものように、あなたの助けに感謝します!

4

4 に答える 4

1

を実行してcolumnA、 の辞書を作成します<String,YourDataSourceItem>。を使用してファイルを実行し、一致をテストしますTryGetValue。見つかった場合は、 を設定しcolumnBます。そうでない場合は、新しいアイテムを作成します。

于 2012-11-12T16:22:50.873 に答える
0

@Neoliskの提案に基づいて、私は自分のプロセスを再考し、DataGridViewバインドを使用することになりましたDataTable。ColumnAには、のデータが入力されますDataTable。次に、ColumnAの各アイテムをに入れますDictionary

私のコードは次のようになります。

int count;
Dictionary<string, int> d = new Dictionary<string, int>();

foreach (DataRow dr in dataSet1.Tables["Table1"].Rows)
{
    d.Add((string)dr[0], count);
    count++;
}

foreach (string textfileitem in TheTextFile)
{
    string item = //specific data from textfileitem
    int value;

    if (d.TryGetValue(item, out value)
    {
        DataRow[] dr = dataSet1.Tables["Table1"].Select("ColumnA = " + item");
        dr[0]["ColumnB"] = item;
    }
    else
    {
        dataTable1.Rows.Add(null, item);
    }
}

少なくとも、それが正確であることを願っています。私は自分のコードを一般的なものにして、本質的でないものを取り除こうとしました。

于 2012-11-12T21:03:01.160 に答える
0

私はこのようなことをします:

List<string> listItems = ListView1.Items.Select(item => item[0].ToString())  // Get list of current items
foreach (string textItem in TheTextFile.Except(listItems)) { // Get all text items that are not in the current list
// Add missing list view item
}
于 2012-11-12T17:10:06.727 に答える
0

これを行う別の方法を次に示します。

List<string> missingItems = new List<string>();
foreach (string textfileitem in TheTextFile)
{
    foreach (ListViewItem item in ListView1.Items)
    {
        var existingitem = item.SubItems[0];

        if (existingitem.Text == textfileitem)
        {
            item.SubItems[1].Text = textfileitem;
        }
        else
        {
            missingItems.Add(textfileitem);
        }
    }
}
foreach (string missingItem in missingItems)
{
    // Add missing item to your ListView.
    ListView1.Items.Add("missing").SubItems.Add(missingItem);
}
于 2012-11-12T16:32:05.417 に答える