2014-11-06 3 views
-1

Я работаю над приложением истории etime, данные приводятся в sql из приложения adp.Использование sqlcommand для заполнения reportviewer, но только выбранные поля заполняются из одной таблицы, как добавить другую таблицу?

Требование

Пользователь хочет видеть старую информацию времени листа для конкретного сотрудника

Процесс

Пользователь нажимает на 1) paygroup из ниспадающего 2) сотрудники drop down получают группировку с помощью paygroup 3) Выбирает (From Date) и (To Date) 4) Щелчки на отчете о запуске и данные заполняются

Заполнение работы выпадающего безупречно, это когда я нажимаю отчет о запуске, только столбцы paygroup, empid и date заполняются, но столбцы DeptNo, WorkCenterID, JobCode, InPunch, OutPunch не заполняются. О, и заполняемые столбцы находятся в таблице EtimePunchDetail, другие - в EtimeEmployees, как я могу использовать EtimeEmployees, а поля в моей SqlCommand - это мой вопрос? Эти поля не являются параметрами, так что тот, где я запутался, потому что другие параметры ...

Код я использовал, чтобы заполнить столбцы

private void button1_Click(object sender, EventArgs e) //run report button loads all the pieces onto the report. 
     { 

      if (FromDate.Value > ToDate.Value) 
      { 
       MessageBox.Show("From Date Must be Less Than To Date"); 
      } 
      else 
       //fileexport 
       using (MSSQL.SqlConnection connection = new MSSQL.SqlConnection(constr)) 
       { 
        timepunchnew = new EtimeHistoryDataSet(); 
        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.SqlParameter parmEmp = new MSSQL.SqlParameter(); 
         parmEmp.ParameterName = "@empid"; 
         parmEmp.Value = Employee.SelectedValue; 
         command.Parameters.Add(parmEmp); 

         MSSQL.SqlParameter paramPayGroup = new MSSQL.SqlParameter(); 
         paramPayGroup.ParameterName = "@paygroup"; 
         paramPayGroup.Value = Paygroup.SelectedValue; 
         command.Parameters.Add(paramPayGroup); 

         MSSQL.SqlParameter paramFromDate = new MSSQL.SqlParameter(); 
         paramFromDate.ParameterName = "@fromdate"; 
         paramFromDate.DbType = DbType.DateTime; 
         paramFromDate.SqlDbType = SqlDbType.DateTime; 
         paramFromDate.Value = FromDate.Value.ToString(""); 
         command.Parameters.Add(paramFromDate); 

         MSSQL.SqlParameter paramToDate = new MSSQL.SqlParameter(); 
         paramToDate.ParameterName = "@todate"; 
         paramToDate.DbType = DbType.DateTime; 
         paramToDate.SqlDbType = SqlDbType.DateTime; 
         paramToDate.Value = ToDate.Value;; 
         command.Parameters.Add(paramToDate); 

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

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

         reportViewer1.LocalReport.DisplayName = MakeValidFileName(Employee.Text) + "-" + FromDate.Value.ToString("MM") + "!" + (FromDate.Value.ToString("dd")) + "!" + FromDate.Value.ToString("yyyy") + "-" + ToDate.Value.ToString("MM") + "!" + ToDate.Value.ToString("dd") + "!" + ToDate.Value.ToString("yyyy"); 

         reportViewer1.LocalReport.ReportPath = reportPath; 

         reportViewer1.LocalReport.DataSources.Clear(); 

         reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("EtimeHistoryDataSet_Etime", timepunchnew.Etime)); 

         reportViewer1.RefreshReport(); 
         reportViewer1.Refresh(); 
         reportViewer1.Visible = true; 

        } 
       } 
     } 

ответ

0

Вы можете добавить присоединиться к вашей SQL заявлении получить записи из другой таблицы.

В вашем случае ...

SELECT pd.*, e.EmployeeNameOrWhateverFieldYouWant 
FROM EtimePunchDetail pd INNER JOIN EtimeEmployee e ON e.EmpID = pd.EmpID 
WHERE (pd.EmpID = @empid) And (pd.Paygroup = @paygroup) 
And (pd.TransDate >= @fromdate) And (pd.TransDate <= @todate) 

Примечания добавления псевдонимов таблиц, которые делают ссылки на таблицу более удобно, так как вам необходимо квалифицировать любые поля, которые существуют в обеих таблицах (в противном случае SQL может 't указать, из какой таблицы вы пытаетесь получить данные, и выдает ошибку).

Вам нужно только добавить поля из таблицы сотрудников в качестве параметров, если вам нужно использовать их для фильтрации ваших результатов. Они будут отлично работать в списке выбора.

 Смежные вопросы

  • Нет связанных вопросов^_^