Как отобразить значение в поле со списком в моем отчете?

У меня есть форма с выпадающим списком и датой. Я хочу, чтобы пользователь выбрал значение в выпадающем списке и выбрал дату, и это значение необходимо зафиксировать в качестве параметра и отобразить в отчете, где дата равна выбранной дате, а itempiececode соответствует выбранному значению выпадающего списка.

Вовлеченные части

Форма - Piece Code.cs Отчет - Report6.rdlc ReportViewer в форме Form Code.cs - reportviewer1

Если вы все еще не понимаете, в чем заключается мой вопрос, нажмите -> Изображение

выделенный желтый - то, что мне нужно.

Код у меня ооочень далеко

Заполнить просмотрщик отчетов

private void PieceCode_Load(object sender, EventArgs e)
{
    // TODO: This line of code loads data into the 'CorsicanaNetWeightDataSet9.CandyPieceSize' table. You can move, or remove it, as needed.
    this.CandyPieceSizeTableAdapter.Fill(this.CorsicanaNetWeightDataSet9.CandyPieceSize);
    // TODO: This line of code loads data into the 'CorsicanaNetWeightDataSet4.PieceDimensionMasterDataUpdate' table. You can move, or remove it, as needed.
    this.PieceDimensionMasterDataUpdateTableAdapter.Fill(this.CorsicanaNetWeightDataSet4.PieceDimensionMasterDataUpdate);
    // TODO: This line of code loads data into the 'corsicanaNetWeightDataSet4piece.Item_Piece' table. You can move, or remove it, as needed.
    this.item_PieceTableAdapter.Fill(this.corsicanaNetWeightDataSet4piece.Item_Piece);
    PieceReport pr = new PieceReport();
    reportViewer1.Visible = false;
    this.reportViewer1.RefreshReport();
}

Для заполнения поля со списком я использовал источник данных и свойство displaymemeber ** Я использовал мастер отчетов для генерации отчета6**

я использовал GUI для большей части программы, поэтому не так много кода, чтобы поделиться

Резюме того, что мне нужно, мне нужно, чтобы combobox1.selectedtext был равен параметру в report6, а datetimepicker.text = другому параметру, чтобы я мог отобразить его в моем средстве просмотра отчетов?? или если есть другой обходной путь для программы.

Я здесь полностью честен, и, пожалуйста, не закрывайте это как не по теме, или ставьте меня в тупик, потому что я предоставил все, что у меня есть для вашего понимания, и, пожалуйста, помогите мне, так как это последняя часть моего проекта, и я очень хотел бы завершить его перед праздниками и провести время с семьей, спасибо за вашу помощь

Пробовал это с кодом, GUI просто не режет время от времени

namespace CorsicanaNetWeightProgram
{
    public partial class PieceCode : Form
    {

        public string constr = "Data Source=KCMJF1XTR1\\SQLEXPRESS;Initial Catalog=CorsicanaNetWeight;Integrated Security=True";

        public reportfiller fullpiecedetails;

        public piecedescription piece;


        PieceReport pr = new PieceReport(); 
        public PieceCode()
        {
            InitializeComponent();
        }

        private void PieceCode_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'CorsicanaNetWeightDataSet9.CandyPieceSize' table. You can move, or remove it, as needed.

            // TODO: This line of code loads data into the 'corsicanaNetWeightDataSet4piece.Item_Piece' table. You can move, or remove it, as needed.
           // this.item_PieceTableAdapter.Fill(this.corsicanaNetWeightDataSet4piece.Item_Piece);
            PieceReport pr = new PieceReport();
            reportViewer1.Visible = false;
            piece = new piecedescription();
            fillpiece();



            this.reportViewer1.RefreshReport();
        }

        private void fillpiece()
        {
            try
            {
            using(MSSQL.SqlConnection connection = new MSSQL.SqlConnection(constr))
            {
                connection.Open ();
                using (MSSQL.SqlCommand command = new MSSQL.SqlCommand("SELECT Item + '-' + Description AS PieceDescription FROM dbo.[Piece Dimension Master Data]" ,connection))
                {
                  MSSQL.SqlDataAdapter myadapter = new System.Data.SqlClient.SqlDataAdapter();
                        myadapter.SelectCommand = command;
                        myadapter.Fill(piece, "DataTable1");
                comboBox1.DataSource = piece.DataTable1;
                comboBox1.ValueMember = "PieceDescription";
                comboBox1.DisplayMember = "PieceDescription";


        }
            }
            }

            catch (Exception) { /*Handle error*/ }
            }


        private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
        {          

        }

        private void button1_Click(object sender, EventArgs e)
        { 


            reportViewer1.Visible = true;
            {
                using (MSSQL.SqlConnection connection = new MSSQL.SqlConnection(constr))
                {
                    fullpiecedetails = new reportfiller();
                    connection.Open();
                    //MSSQL.SqlCommand command = new MSSQL.SqlCommand("SELECT * From EtimePunchDetail WHERE (EmpID = @empid) And  (Paygroup = @paygroup) And (TransDate >= @fromdate) And (TransDate <= @todate)", connection);
                    MSSQL.SqlCommand command = new MSSQL.SqlCommand("SELECT * FROM dbo.[Piece Dimension Master Data] WHERE Item + '-' + Description  = @piecedesc", connection);
                    {

                        MSSQL.SqlParameter parmEmp = new MSSQL.SqlParameter();
                        parmEmp.ParameterName = "@piecedesc";
                        parmEmp.Value = comboBox1.SelectedValue;
                        command.Parameters.Add(parmEmp);



                        MSSQL.SqlDataAdapter EtimePunchDetailTableAdapter = new System.Data.SqlClient.SqlDataAdapter();
                        EtimePunchDetailTableAdapter.SelectCommand = command;
                        EtimePunchDetailTableAdapter.Fill(fullpiecedetails, "DataTable1");



                        string exeFolder = Path.GetDirectoryName(Application.ExecutablePath);
                        string reportPath = exeFolder + @"\Report6.rdlc";



                        reportViewer1.LocalReport.ReportPath = reportPath;

                        reportViewer1.LocalReport.DataSources.Clear();

                        reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("reportfiller_DataTable1", fullpiecedetails));
                        reportViewer1.RefreshReport();
                        reportViewer1.Refresh();
                        reportViewer1.Visible = true;
                   }
                }
            }

        }

Я получаю следующую ошибку: "Значение не попадает в ожидаемый диапазон". В этой части кода reportViewer1.LocalReport.DataSources.Add(новый Microsoft.Reporting.WinForms.ReportDataSource("reportfiller_DataTable1", fullpiecedetails));

2 ответа

Решение

Я создал новую форму, добавил новый отчет, новый набор данных и сделал все через графический интерфейс - использовал мастер для создания отчета.

Я отредактировал набор данных для следующего кода

SELECT Item, Description, [Piece Category], Shape, [Deposit Weight], [Center Weight], [Center Weight Constant], [Coating Weight], [Coating Weight Constant], [Decorations Weight], [Inclusions Weight], [Center Diameter_LL], [Center Diameter_UL], [Center Length_LL], [Center Length_UL], [Center Width_LL], [Center Width_UL], [Center Height_LL], [Center Height_UL], [Center Weight Variation], [Coated Diameter_LL], [Coated Diameter_UL], [Coated Length_LL], [Coated Length_UL], [Coated Width_LL], [Coated Width_UL], [Coated Height_LL], [Coated Height_UL], [Coated Weight Variation], Item + '-' + Description AS [PieceDescription] FROM [Piece Dimension Master Data] WHERE **Item + '-' + Description  = @piece**

Затем добавили в отчет таблицу со всеми необходимыми столбцами

GUI сгенерировал этот код для меня

namespace CorsicanaNetWeightProgram
{
    public partial class PieceCodepc : Form
    {
        public PieceCodepc()
        {
            InitializeComponent();
        }

        private void PieceCodepc_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'dataSet1.DataTable1' table. You can move, or remove it, as needed.
            this.dataTable1TableAdapter.Fill(this.dataSet1.DataTable1);

        }

        private void button1_Click(object sender, EventArgs e)
        {

            // TODO: This line of code loads data into the 'empty.Piece_Dimension_Master_Data' table. You can move, or remove it, as needed.
            this.Piece_Dimension_Master_DataTableAdapter.Fill(this.empty.Piece_Dimension_Master_Data, comboBox1.SelectedValue.ToString());

            this.reportViewer1.RefreshReport();


        }
    }
}

Все, что я сделал, это передал comboBox1.SelectedValue.ToString() в DataTableAdapter, и ЭТО РАБОТАЛО!!!!!

Скажите, что ваше имя параметра для даты - DateParameter. Чтобы установить значение, я сделаю следующее:

        ReportParameter rpDateParameter = new ReportParameter();
        rpDateParameter.Name = "DateParameter";
        rpDateParameter.Values.Add(dateTimePicker1.Value.ToString());
        reportViewer1.LocalReport.SetParameters(new ReportParameter[] { rpDateParameter });

        // Refresh the report
        reportViewer1.RefreshReport();
Другие вопросы по тегам