0

Visual Basic で同様の質問を見つけましたが、正確なものはなく、C# ではありません。

10列のデータテーブルからINDEX(つまり、1、4、および5はインデックスであり、名前/ヘッダーではありません)を使用して特定の列(1、4、および5など)をコピーし、オブジェクトを作成します( array/list が最適でしょうか?)、これを form2 に渡します。form2 では、これらの配列/リストから新しいデータテーブルを作成したいので、元のデータテーブルの列 1、4、および 5 と同じ 3 つの列を持つことになります。また、他の場所で設定する true/false 値に基づいて、渡す前に各配列の最初の要素を削除するオプションが必要です。

これまでに得た概要は次のとおりです(「alldata」はデータテーブル、「cx」は取得したいx番目の列です):

フォーム1:

    private void button2_Click(object sender, EventArgs e) //next
    {
        this.Hide();

        int c1 = 1; int c2 = 4; int c3 = 5
        int[] 1st_col; int[] 2nd_col; int[] 3rd_col;
        [assign c1th column to 1st_col, etc]

        if (variable = marker_number)
        {
            [delete first element of each array]
        }

        Form2 step2 = new Form2(1st_col, 2nd_col, 3rd_col);
        step2.ShowDialog();
    }

フォーム2:

    public Form2(int 1st_col, int 2nd_col, int 3rd_col)
    {

        DataTable mytable1 = new DataTable();            
        [add 1st, 2nd, and 3rd cols to mytable1]
        InitializeComponent();


    }

他に提供すべきものがある場合は、お知らせください。

4

1 に答える 1

0

更新されました、これを試してください:

フォーム1

    private void button2_Click(object sender, EventArgs e)
    {
        //10 column datatable
        var dt10 = new DataTable("DT10");
        dt10.Columns.Add("PKID");
        dt10.Columns.Add("FName"); 
        dt10.Columns.Add("MName");
        dt10.Columns.Add("LName");
        dt10.Columns.Add("Address");
        dt10.Columns.Add("City");
        dt10.Columns.Add("State");
        dt10.Columns.Add("Zip");
        dt10.Columns.Add("Phone");
        dt10.Columns.Add("Fax");

        //give some sample data
        dt10.Rows.Add(new object[] { 1, "Matt", "James", "Smith", "123 Main", "Philadelphia", "PA", "12141", "215-555-1111", "215-555-1212" });
        dt10.Rows.Add(new object[] { 2, "Mark", "James", "Smith", "123 Main", "Pittsburgh", "PA", "12141", "215-555-1111", "215-555-1212" });
        dt10.Rows.Add(new object[] { 3, "Luke", "James", "Smith", "123 Main", "Scranton", "PA", "12141", "215-555-1111", "215-555-1212" });
        dt10.Rows.Add(new object[] { 4, "John", "James", "Smith", "123 Main", "Reading", "PA", "12141", "215-555-1111", "215-555-1212" });
        dt10.Rows.Add(new object[] { 5, "Paul", "James", "Smith", "123 Main", "Harrisburg", "PA", "12141", "215-555-1111", "215-555-1212" });

        //create new datatable with subset of columns
        var dt3 = new DataTable("DT3");
        dt3.Columns.Add("FName");
        dt3.Columns.Add("LName");
        dt3.Columns.Add("Phone");

        //indexes can be hardcoded or set at runtime
        int c1 = 1; int c2 = 3; int c3 = 8;

        //add all rows, but only the specified columns
        foreach (DataRow r in dt10.Rows)
        {
            dt3.Rows.Add(new object[] { r[c1], r[c2], r[c3] } );                
        }

        bool includeFirstRow = chkIncludeFirstRow.Checked;
        if (!includeFirstRow)
        {
            dt3.Rows.RemoveAt(0);
        }

        Form2 step2 = new Form2(dt3);
        step2.ShowDialog();
    }

フォーム2

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    public Form2(DataTable dt)
    {
        InitializeComponent();
        //do your thing here, bind to datagridview or whatever

    }
}
于 2012-08-09T20:46:02.213 に答える