Проблема в зацикливании.нежелательные строки объекта datagridview экспортируются в Excel
Пожалуйста, отредактируйте код, потому что я не могу экспортировать выбранные строки кода.
DataGridView
чтобы преуспеть на основе выбора флажка .Приведенный ниже код экспортирует все строки, даже те строки, которые не выбраны(не проверены) пользователем.Что я уже пробовал:
public void exportSelectedRowsToExcel() { // creating Excel Application Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application(); // creating new WorkBook within Excel application Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing); // creating new Excelsheet in workbook Microsoft.Office.Interop.Excel._Worksheet worksheet = null; // see the excel sheet behind the program app.Visible = true; // get the reference of first sheet. By default its name is Sheet1. // store its reference to worksheet worksheet = workbook.Sheets["Sheet1"]; worksheet = workbook.ActiveSheet; // changing the name of active sheet worksheet.Name = DateTime.Now.ToString("yyyyMMddHHmmssfff"); // storing header part in Excel for (int i = 1; i < CategoryGV.Columns.Count + 1; i++) { worksheet.Cells[1, i] = CategoryGV.Columns[i - 1].HeaderText; } // storing Each row and column value to excel sheet for (int i = 0; i < CategoryGV.Rows.Count - 1; i++) { for (int j = 0; j < CategoryGV.Columns.Count; j++) { worksheet.Cells[i + 2, j + 1] = Convert.ToString(CategoryGV.Rows[i].Cells[j].Value); } } // save the application workbook.SaveAs(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\ExportedCategory.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing); // Exit from the application app.Quit(); }
private void btnExportToExcel_Click(object sender, EventArgs e) { DataGridViewRow row = new DataGridViewRow(); for (int i = 0; i < CategoryGV.Rows.Count; i++) { row = CategoryGV.Rows[i]; if (Convert.ToBoolean(row.Cells["chkBox"].Value)) { int id = Convert.ToInt16(row.Cells["id"].Value); exportSelectedRowsToExcel(); i--; } }
Herman<T>.Instance
Ну-ка, где вы проверяете, выбрана ли строка? ряд.SelectedIndex никогда не используется
Richard Deeming
В вашем коде нет ничего, что могло бы проверить, выбраны ли строки. Вы просто экспортируете каждую строку.
Вам просто нужно добавить тест внутри вашего цикла:
Скрыть скопировать код
for (int i = 0; i < CategoryGV.Rows.Count - 1; i++)
Редактировать: На самом деле, это еще хуже: вы экспортируете каждую строку несколько раз. Если у вас есть 10 строк в сетке и выбрано 5, вы экспортируете все 10 строк 5 раз, каждый раз перезаписывая файл.
Правка 2: На самом деле, все еще хуже. Благодаря тому, что
i--
в цикле в обработчике событий, если выбрана какая-либо строка, ваша программа войдет в бесконечный цикл, экспортируя все строки снова и снова, пока вы не завершите его.