如何通过一次单击获取gridcontrol中的所有数据

时间:2018-05-03 15:12:11

标签: c# sql wpf

如何使用循环在button上单击一下来读取所有记录。我必须打印许多报告。对于表格中的每一行,我需要创建一个报告。并读到表的最后一行。我的想法是使用循环或索引表,但我不知道如何做到这一点。这是我的代码:

private void btnin_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            cnn.Open();
            SqlCommand cmd = new SqlCommand(" SELECT * FROM viewdata1 WHERE Customers = '" + cbbcustomer.Text + "'", cnn);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            cnn.Close();

            XtraReport1 report = new XtraReport1();
            report.DataSource = dt;
            report.ShowPreviewDialog();
        }
        catch ( Exception ex )
        {
            MessageBox.Show(ex.Message);
        }

    }

2 个答案:

答案 0 :(得分:0)

您可以遍历Datatable

foreach(DataRow row in dt.Rows)
{
    DataTable dtrow = new DataTable();
    dtrow = dt.Clone();

    dtrow.ImportRow(row);
    XtraReport1 report = new XtraReport1();
    report.DataSource = dtrow;
    //report.ShowPreviewDialog();  Not sure what happens here but maybe a print method is better suited?        
}

基本上,对于每一行,您创建一个具有相同结构的数据表并导入一行。然后将其指定为您的数据源。这将迭代所有行。

答案 1 :(得分:0)

出于某些原因,我不得不在代码中更改某些内容。我使用了Mark Vance's code,但它不起作用:

        DataTable a = new DataTable();
        a = ((DataView)ctrlgridviewdulieu0.ItemsSource).ToTable();

        foreach (DataRow row in a.Rows)
        {
            DataTable dtrow = new DataTable();
            dtrow = a.Clone();

            dtrow.ImportRow(row);
            try
            {
                cnn.Open();
                SqlCommand cmd = new SqlCommand(" SELECT * FROM viewdulieu2 WHERE Khachdat = N'" + dtrow.ToString() + "'", cnn);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataTable dt1 = new DataTable();
                da.Fill(dt1);
                XtraReport1 report = new XtraReport1();
                report.DataSource = dt1;
                //   report.Print();
                cnn.Close();
                report.ShowPreviewDialog();
            }
            catch (Exception ex)
            {
                cnn.Close();
                MessageBox.Show(ex.Message);
            }
        }