2017-06-20 2 views
2

Ich versuche mit Delimiter den Wert von Datagridview verketten. Leider bin ich mit String-Join verloren. Danke, wenn jemand meinen Fehler korrigieren kann.C# Delimiter wird nicht angezeigt

private void Button_Click(object sender, EventArgs e) 
{  
    string message = string.Empty; 

    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
     bool isSelected = Convert.ToBoolean(row.Cells["Column1"].Value); 
     if (isSelected) 
     { 
      message += String.Join(", ", row.Cells["pk_pspatitem"].Value.ToString()); 
     } 
    } 

    MessageBox.Show(message); 
} 
+1

der Begrenzer zeigt nur zu trennen mehrere Gegenstände. Wenn es nur einen gibt, wird es nicht angezeigt – Nkosi

Antwort

1

Das Trennzeichen wird nur angezeigt, um mehrere Elemente zu trennen. Wenn es nur einen gibt, wird es nicht angezeigt.

Versuchen Sie, alle Werte zu sammeln und verwenden Sie dann die String.Join mit dem Trennzeichen.

List<string> values = new List<string>(); 
foreach (DataGridViewRow row in dataGridView1.Rows) { 
    bool isSelected = Convert.ToBoolean(row.Cells["Column1"].Value); 
    if (isSelected) { 
     values.Add(row.Cells["pk_pspatitem"].Value.ToString()); 
    } 
} 
string message = String.Join(", ", values); 
MessageBox.Show(message); 
0

String.Join wird zum Verketten eines Arrays verwendet. Sie fügen nur eine Zeichenfolge zu einer anderen Zeichenfolge hinzu. Verwenden Sie den Standardverkettungsoperator +.

message += ", " + row.Cells["pk_pspatitem"].Value.ToString(); 

Beachten Sie auch, dass dies Ihre Nachricht verursacht durch ein Komma zu beginnen, die wie folgt festgelegt werden kann:

MessageBox.Show(message.Substring(2)); 

Natürlich können Sie die Zeilen in ein Array umwandeln könnte und dann String.Join verwenden , aber ich sehe darin keinen Wert.

4

Oder Sie können es Abfrage mit LINQ:

string message = String.Join(", ", from DataGridViewRow r in dataGridView1.Rows 
            where true.Equals(r.Cells["Column1"].Value) 
            select r.Cells["pk_pspatitem"].Value); 

Mit pattern matching in C# 7.0 (kommt mit Visual Studio 2017)

string message = String.Join(", ", from DataGridViewRow r in dataGridView1.Rows 
            where r.Cells["Column1"].Value is true 
            select r.Cells["pk_pspatitem"].Value); 
+0

Ich mag Ihre Antwort am besten, aber ich würde lieber sehen, wo (bool) r.Cells ["Column1"]. Value ". Das 'true.Equals' ist ein wenig peinlich. – Enigmativity

+0

@Enigmatismus ist es sehr ungewöhnlich, aber meiner Meinung nach ist es am sichersten im Vergleich zu Objekt, das alles einschließlich Null und DBNull.Value sein kann. Es tut so etwas wie "obj ist bool && (bool) obj == wahr" https://referencesource.microsoft.com/#mscorlib/system/boolean.cs,0bb4737ad44c98a4 – Slai

+0

Fair genug. Das hört sich nach einem vernünftigen Ansatz an. – Enigmativity