29

私はデータテーブルを持っていますが、特定の列を選択してテーブルにデータを入力することが可能かどうか知りたいです。列は以下のように設定されています

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

列col1、col2 col6、col7、col3を選択したい。そして、データテーブル内の行のグリッドビューでデータを支払います。現在、私が使用しているコードは以下のとおりであり、特定のデータを選択します。私はSQLからデータを選択していません。そのデータは、データテーブルに格納されている別のExcelから選択されています。しかし、別の領域の他の列も必要です。このデータは、wordでテーブルに書き込まれています。

 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++;
                }
4

6 に答える 6

57

また、このように試すことができます、

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

 DataTable dt= new DataView(fromDataTable).ToTable(false, selectedColumns);
于 2013-06-13T06:34:30.330 に答える
36

最初にテーブルをビューに格納し、次にそのビューから新しいテーブルに列を選択します。

// Create a table with abitrary columns for use with the example
System.Data.DataTable table = new System.Data.DataTable();
for (int i = 1; i <= 11; i++)
    table.Columns.Add("col" + i.ToString());

// Load the table with contrived data
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);
}

// Create the DataView of the DataTable
System.Data.DataView view = new System.Data.DataView(table);
// Create a new DataTable from the DataView with just the columns desired - and in the order desired
System.Data.DataTable selected = view.ToTable("Selected", false, "col1", "col2", "col6", "col7", "col3");

サンプルデータを使用して、私が見つけたこのメソッドをテストしました。 選択した列のみを表示するADO.NETDataViewを作成します。

于 2012-12-07T09:41:15.647 に答える
1

匿名の出力レコードを使用した実際の例を次に示します。質問がある場合は、以下にコメントを入力してください。                    

public partial class Form1 : Form
{
    DataTable table;
    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();
    }
}
于 2012-12-07T10:29:27.773 に答える
1

私が尋ねる質問は、必要がないのになぜDataTableに余分な列を含めるのかということです。

たぶん、SQL selectステートメントを変更して、DataTableにデータを入力するときに探している特定の基準を参照するようにする必要があります。

LINQを使用して、DataTableを列挙可能としてクエリし、特定の列のみを表すリストオブジェクトを作成することもできます。

それ以外は、不要なDataGridView列を非表示にします。

于 2012-12-07T09:27:47.010 に答える
0

次のようなメソッドを作成できます。

  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;
    }

できるだけ多くの列を返すことができます。以下に示すように、呼び出しパラメーターとして列を追加するだけです。

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

また、この行にパラメータを追加します。

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

次に、関数を次のように実装します。

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

ありがとう...

于 2015-12-21T15:25:09.607 に答える
-1
DataView dv = new DataView(Your DataTable);

DataTable dt = dv.ToTable(true, "Your Specific Column Name");

dtには、選択した列の値のみが含まれます。

于 2018-02-26T15:54:29.310 に答える