Привет, я снова тут, раз никто не хочет отвечать на этот глупый вопрос то отвечу сам, малоли кому понадобится
Вообщем, вся проблема была в том что, у меня в студии 9 в конфигурации C++ программирования, к проекту нельзя добавить DataSource ну это типа Add->New Item...-> и так далее и там выбрать темплейт DataSource, вот этого не нашел... почемуто... (в конфигурации например C# всё на месте)
Решение которое я предлогаю, не очень красиво, по той пречине что приходится создавать в памяти лишний объект размером с полученную из базы таблицу данных, а это не есть гуд.
Значит так, проблема - к файлу Report1.rdlc необходимо (просто обязательно почемуто) добавить DataSource, решение - создаём объект с полями которые потом будем выводить в репорт, примерно так:
public ref class Rep1{
public:
Rep1(String ^ Kompaniya){
m_kompaniya = Kompaniya;
}
property String ^ kompaniya{
void set(String ^ Komp){
m_kompaniya = Komp;
}
String ^ get(){
return m_kompaniya;
}
}
String ^ m_kompaniya;
};
в данном случае будем выводить только одно поле kompaniya. Теперь можем добавить к проекту DataSource в виде объекта ну это переходим на вьюшку Data Sources и там жмём Add new data source выбераем Object находим Rep1 и добавляем его. В списке должен появится Rep1 с одним доступным полем [kompaniya]. Если присутствует идём дальше... Переходим к дизайну Report1.rdlc, в верху в менюшке должна появится позиция Report идём Report->Data Sources... там выбераем Rep1 и жмём Add to Report. Вот это и делает то о чём я писал в первом посте, т.е. добавляет в файл Report1.rdlc определение датасорса. Запоминаем Name который у нас получился при добавлении датасорса, ну или сами его переименовываем я назвал его Dataset1.
Всё теперь тыкаем на форму репорта table и пишем в поле =Fields!kompaniya.Value
теперь севим Report1.rdlc, всё он готов
меняем немного код присвоения репорту датасета:
void mrep1::mrep1_Load(System::Object^ sender, System::EventArgs^ e) {
SqlConnection ^ sqlc;
SqlDataAdapter ^ sqld;
DataSet ^ sqlds;
sqlc = gcnew SqlConnection("Data Source=127.0.0.1;Initial Catalog=markbase;Persist Security Info=True;User ID=sa;Password=crhsnj");
sqlc->Open();
sqld = gcnew SqlDataAdapter("Select * From m_allpotrebs", sqlc);
sqlds = gcnew DataSet();
sqld->Fill(sqlds,"m_allpotrebs");
reportViewer1->ProcessingMode = ProcessingMode::Local;
reportViewer1->LocalReport->ReportPath = "..\\plugPotrebiteli\\Report1.rdlc";
array<Rep1 ^> ^ data = gcnew array<Rep1^>(sqlds->Tables[0]->Rows->Count);
for(int i=0; i<data->Length; i++){
String ^ tm = sqlds->Tables[0]->Rows[i]->ItemArray[1]->ToString();
data[i] = gcnew Rep1(tm);
}
reportViewer1->LocalReport->DataSources->Add(gcnew ReportDataSource("Dataset1", data));
reportViewer1->RefreshReport();
}
ну вот, вроде ничего не забыл, теперь у нас в репорт передаётся такой вот датасет , решение мне не очень нравится, как всётаки заставить репорт работать без вот этих вот манипуляций с созданием объекта и добавления его в качестве датасорса в Report1.rdlc, напоминаю что если этого не сделать, то репорт кричит что никаких датасетов не найдено, хотя reportViewer1->LocalReport->DataSources->Add(gcnew ReportDataSource("Dataset1", sqlds->Tables[0]));рисутствовал , что делать, как победить .
Данное сообщение получено с сайта GotDotNet.RU
Последний раз редактировалось 01 August 2008 09:39
|