it-swarm.com.de

bestimmte Spalten einer Datentabelle auswählen

Ich habe eine Datentabelle und möchte wissen, ob es mir möglich ist, bestimmte Spalten auszuwählen und die Daten in eine Tabelle einzugeben. Die Spalten sind wie folgt dargestellt

| col1 | col2 | col3 | col4 | col5 | col6 | col7 | col8 | col9 | col10 | col11 |

Ich möchte die Spalten col1, col2 col6, col7, col3 auswählen. und die Daten in einer Rasteransicht der Zeilen in der Datentabelle anzeigen .. derzeit befindet sich der von mir verwendete Code unterhalb und wählt nur bestimmte Daten aus. Ich wähle die Daten nicht aus SQL aus. Die Daten werden aus einem anderen Excel ausgewählt, das in einer Datentabelle gespeichert ist. Ich benötige aber auch die anderen Spalten in einem anderen Bereich. Diese Daten werden in eine Tabelle in Word geschrieben

 for (int i = 1; i < table.Rows.Count; i++)
            {
                for (int j = 0; j < table.Columns.Count; j++)
                {
                    if (j == 0)
                    {
                        val = filteredData.Rows[row][col].ToString();
                    }
                    else
                    {
                        val = filteredData.Rows[row][col].ToString();

                        if (val == "-" || val == "")
                        {
                            val = filteredData.Rows[row][col].ToString();

                        }
                        else
                        {
                            val = Convert.ToString(Math.Round(Convert.ToDouble(filteredData.Rows[row][col]), MidpointRounding.AwayFromZero));

                        }
                    }

                    table[j, i].TextFrame.Text = val;
                    col++;
                }
17
Jim Brad

Speichern Sie die Tabelle zuerst in einer Ansicht und wählen Sie dann Spalten aus dieser Ansicht in einer neuen Tabelle aus.

System.Data.DataTable table = new System.Data.DataTable();
for (int i = 1; i <= 11; i++)
    table.Columns.Add("col" + i.ToString());

for (int i = 0; i < 100; i++)
{
    System.Data.DataRow row = table.NewRow();
    for (int j = 0; j < 11; j++)
        row[j] = i.ToString() + ", " + j.ToString();
    table.Rows.Add(row);
}

System.Data.DataView view = new System.Data.DataView(table);
System.Data.DataTable selected = view.ToTable("Selected", false, "col1", "col2", "col6", "col7", "col3");

Die Beispieldaten wurden zum Testen dieser Methode verwendet. Ich habe Folgendes gefunden: ADO.NET DataView erstellen, das nur ausgewählte Spalten zeigt

26
MrFox

Auch können wir so versuchen,

 string[] selectedColumns = new[] { "Column1","Column2"};

 DataTable dt= new DataView(fromDataTable).ToTable(false, selectedColumns);
37

Die Frage, die ich stellen würde, lautet: Warum fügen Sie die zusätzlichen Spalten in Ihre DataTable ein, wenn sie nicht benötigt werden? 

Möglicherweise sollten Sie Ihre SQL-Anweisung select so ändern, dass sie die spezifischen Kriterien berücksichtigt, nach denen Sie suchen, während Sie Ihre DataTable füllen.

Sie können LINQ auch verwenden, um Ihre DataTable als Enumerable abzufragen und ein Listenobjekt zu erstellen, das nur bestimmte Spalten darstellt.

Blenden Sie ansonsten die DataGridView-Spalten aus, die Sie nicht benötigen.

1
Derek

Sie können eine Methode erstellen, die folgendermaßen aussieht:

  public static DataTable SelectedColumns(DataTable RecordDT_, string col1, string col2)
    {
        DataTable TempTable = RecordDT_;

        System.Data.DataView view = new System.Data.DataView(TempTable);
        System.Data.DataTable selected = view.ToTable("Selected", false, col1, col2);
        return selected;
    }

Sie können so viele Spalten wie möglich zurückgeben. Fügen Sie die Spalten einfach als Aufrufparameter hinzu (siehe unten):

public DataTable SelectedColumns(DataTable RecordDT_, string col1, string col2,string col3,...)

und füge auch die Parameter zu dieser Zeile hinzu:

System.Data.DataTable selected = view.ToTable("Selected", false,col1, col2,col3,...);

Dann implementieren Sie einfach die Funktion als:

 DataTable myselectedColumnTable=SelectedColumns(OriginalTable,"Col1","Col2",...);

Vielen Dank...

0
Sunday Efeh

Hier ein Arbeitsbeispiel mit anonymen Ausgabedatensätzen, wenn Sie Fragen haben, fügen Sie einen Kommentar ein:

öffentliche Teilklasse Form1: Form { DataTable-Tabelle;

    public Form1()
    {
        InitializeComponent();

        #region TestData
        table = new DataTable();
        table.Clear();

        for (int i = 1; i < 12; ++i)
            table.Columns.Add("Col" + i);
        for (int rowIndex = 0; rowIndex < 5; ++rowIndex)
        {
            DataRow row = table.NewRow();
            for (int i = 0; i < table.Columns.Count; ++i)
                row[i] = String.Format("row:{0},col:{1}", rowIndex, i);
            table.Rows.Add(row);
        }
        #endregion

        bind();
    }

    public void bind()
    {
        var filtered = from t in table.AsEnumerable()
                       select new
                       {
                           col1 = t.Field<string>(0),//column of index 0 = "Col1"
                           col2 = t.Field<string>(1),//column of index 1 = "Col2"
                           col3 = t.Field<string>(5),//column of index 5 = "Col6"
                           col4 = t.Field<string>(6),//column of index 6 = "Col7"
                           col5 = t.Field<string>(4),//column of index 4 = "Col3"
                       };
        filteredData.AutoGenerateColumns = true;
        filteredData.DataSource = filtered.ToList();
    }
}
0
pawciu