#c# #visual-studio #devexpress #windows-forms-designer #xtrareport
#c# #visual-studio #devexpress #windows-forms-designer #xtrareport
Вопрос:
Мне нужен код для выбранного в datagridview и после выбранной печати в XtraReport. Таким образом, я выбираю выбранные строки, что мне нужно дальше?
for (int i = 0; i < dataGridView1.Rows.Count; i )
{
bool isCellChecked = Convert.ToBoolean(dataGridView1.Rows[i].Cells[0].Value);
if (isCellChecked == true)
{
var allCheckedRows = this.dataGridView1.Rows.Cast<DataGridViewRow>()
.Where(row => (bool?)row.Cells[0].Value == true)
.ToList();
Комментарии:
1. Вы уже разработали отчет? Каков источник данных для вашего DataGridView? Если он привязан к списку<T>, вы также можете привязать отчет к тому же списку<T> . Если вы используете элемент управления DevExpress XtraGrid, вы можете использовать его встроенную функциональность для печати / экспорта только выбранных строк.
2. Да, у меня есть отчет. Источник Datagridview взят из набора данных. У меня нет списка<T>
3. Затем вам нужно создать набор данных из отфильтрованных строк и использовать его также для источника данных XtraReport.
4. Хорошо, это звучит просто, но мне сложно это сделать. У меня уже есть набор данных, может быть, вы имеете в виду в коде создание нового набора данных?
5. У вас есть коллекция DataGridViewRows, но вам действительно нужен DataTable / DataSet, к которому XtraReport может быть привязан к данным. Можете ли вы преобразовать эту коллекцию в DataTable / DataSet?
Ответ №1:
Это решение отлично работало для меня в WinForms …
Чтобы выбрать видимый в Gridview:
private DataTable GetVisible()
{
//Export GRIDVIEW to DataTable
DataTable DT = new DataTable();
foreach (GridColumn column in gridView1.VisibleColumns)
{
DT.Columns.Add(column.FieldName, column.ColumnType);
}
for (int i = 0; i < gridView1.DataRowCount; i )
{
DataRow row = DT.NewRow();
foreach (GridColumn column in gridView1.VisibleColumns)
{
row[column.FieldName] = gridView1.GetRowCellValue(i, column);
}
DT.Rows.Add(row);
}
return DT;
}
Для отображения формы предварительного просмотра:
private void FullBtnView_Click(object sender, EventArgs e)
{
Reports.FullList Rep = new Reports.FullList
{
DataSource = GetVisible()
};
using (ReportPrintTool printTool = new ReportPrintTool(Rep))
{
// Invoke the Print Preview form
// with the specified look and feel setting.
printTool.ShowPreviewDialog(UserLookAndFeel.Default);
}
}
Для печати данных:
private void FullBtnPrint_Click(object sender, EventArgs e)
{
Reports.FullList Rep = new Reports.FullList
{
DataSource = GetVisible()
};
using (ReportPrintTool printTool = new ReportPrintTool(Rep))
{
// Invoke the Print Preview form
// with the specified look and feel setting.
printTool.Print();
}
}