Shaheer Rizwan Ответов: 1

Только запись выбранных строк datagridview в csv.


Приведенный ниже код используется для записи всех данных/вводов в DataGridView в csv-файл, я хотел бы знать, как я могу изменить это, чтобы в файл были записаны только строки, выбранные с помощью столбца dataGridViewCheckboxColumn, а не все целиком.

Что я уже пробовал:

Dim StrExport As String = ""
For Each C As DataGridViewColumn In dataGVGeneral.Columns
    StrExport &= """" & C.HeaderText & ""","
Next
StrExport = StrExport.Substring(0, StrExport.Length - 1)
StrExport &= Environment.NewLine

For Each R As DataGridViewRow In dataGVGeneral.Rows
    For Each C As DataGridViewCell In R.Cells
        If Not C.Value Is Nothing Then
            StrExport &= """" & C.Value.ToString & ""","
        Else
            StrExport &= """" & "" & ""","
        End If
    Next
    StrExport = StrExport.Substring(0, StrExport.Length - 1)
    StrExport &= Environment.NewLine
Next

Dim tw As System.IO.TextWriter = New System.IO.StreamWriter("E:\SAT\Work.io\Work.io\bin\Debug\ListofTasks.csv", False)
tw.Write(StrExport)
tw.Close()

Garth J Lancaster

да ладно - вы уже проходили через итерации этого раньше - если у вас есть столбец checkbox в datagridview, то, пока вы просматриваете строки datagridview, если у вас есть столбец cherckbox .Selected = True затем запишите эту строку, но постройте ее из других столбцов, не включая столбец checkbox

Shaheer Rizwan

извини, я немного медлительный ученик и нуб. Ну что ж, спасибо за это, Уилл.
Если clmSelected.Selected = True
Затем
оператор, предшествующий StrExport = StrExport.Substring(0, StrExport.Длина -1)?

Richard MacCutchan

Да, просто проверьте значение флажка каждой записи по мере их обработки. Почему это так сложно?

Shaheer Rizwan

это просто не работает и я запутался человек

Richard MacCutchan

Логика довольно проста:

For Each Row in your datagridview:    
    If the checkbox column value is True
        Write the other column cells to the csv file
    End If
End For

Так что все, что вам нужно сделать, это заполнить детали ...

Richard MacCutchan

Оглядываясь назад на ваши другие вопросы, шесть только на эту тему, я думаю, что вам нужно потратить больше времени на изучение языка C# и попробовать некоторые более простые упражнения.

Shaheer Rizwan

Я просто застреваю, когда дело доходит до реальной реализации этого материала

Richard MacCutchan

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

1 Ответов

Рейтинг:
0

OriginalGriff

Да ладно, это совсем не сложно:
1) Определите столбец, содержащий флажок.
2) внутри цикла строк приведите текущую ячейку столбца строки / флажка к флажку и проверьте его свойство "Checked". Если это так true, добавьте его в CSV. Если это не так, пропустите ряд.

Какая часть этого для вас трудна?


Shaheer Rizwan

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

В любом случае, будет ли это работать

Для каждого R в качестве DataGridViewRow в dataGVGeneral.Rows
Если clmSelected.Selected = True Тогда
Для Каждого C Как DataGridViewCell В R. Cells
Если Не С. Стоимость Ничего
StrExport &= """" & C. значение.ToString & ""","
Еще
StrExport &ампер;= """" &ампер; "" &амп; ""","
Конец, Если
Следующий
StrExport = StrExport.Substring(0, StrExport.Длина - 1)
StrExport &= Environment.NewLine
Конец, Если
Следующий

Garth J Lancaster

сработает ли это ? вы спрашиваете - проверьте, выясните, поэкспериментируйте - Информационные технологии - это наука-сформулируйте гипотезу (напишите какой-нибудь код), протестируйте ее, модифицируйте и попробуйте еще раз

Shaheer Rizwan

ну, я попробовал это, и просто не повезло, я поставил его перед петлями For, не повезло.



Dim StrExport As String = ""
Для каждого C как DataGridViewColumn в dataGVGeneral.Столбцы
StrExport &ампер;= """" &амп; С. HeaderText и усилитель; ""","
Следующий
StrExport = StrExport.Substring(0, StrExport.Длина - 1)
StrExport &= Environment.NewLine
Если clmSelected.Selected = True Тогда
Для каждого R в качестве DataGridViewRow в dataGVGeneral.Rows
Для Каждого C Как DataGridViewCell В R. Cells
Если Не С. Стоимость Ничего
StrExport &= """" & C. значение.ToString & ""","
Еще
StrExport &ампер;= """" &ампер; "" &амп; ""","
Конец, Если
Следующий
StrExport = StrExport.Substring(0, StrExport.Длина - 1)
StrExport &= Environment.NewLine
Следующий
Дим ТВт как системы.ИО.Textwriter В = Новой Системы.ИО.Модулю Записи StreamWriter("E:\SAT\Work.io\Work.io\bin\Debug\ListofTasks.csv", Ложные)
tw.Write(StrExport)
ТВт.Рядом()
За endif

OriginalGriff

Нет. Почему это должно сработать? Это просто "кодирование наугад" - и это никогда не работает хорошо.

Вернитесь к своему исходному коду, прочитайте то, что я сказал еще раз, и подумайте о том, что вам нужно сделать.

Shaheer Rizwan

не могли бы вы дать мне подсказку или что-то еще, Чувак, я действительно застрял :(

OriginalGriff

Сколько еще подсказок вам нужно?
В каком столбце находится флажок?

Shaheer Rizwan

Я использовал этот код, я получаю это, если я делаю clmSelected.Selected = True, я должен запустить цикл. Как я могу получить его, чтобы пропустить, если clmSelected.Тогда Selected = True...



Private Sub btnToSession_Click(sender As Object, e As EventArgs) обрабатывает btnToSession.Щелчок
'Напишите в файл Session.csv, чтобы легко загрузить его в эту форму
'Только выбранное значение через clmSelected
Dim StrExport As String = ""
Для каждого C как DataGridViewColumn в dataGVGeneral.Столбцы
StrExport &ампер;= """" &амп; С. HeaderText и усилитель; ""","
Следующий
StrExport = StrExport.Substring(0, StrExport.Длина - 1)
StrExport &= Environment.NewLine

Для каждого R в качестве DataGridViewRow в dataGVGeneral.Rows
- Если clmSelected.Selected = True Тогда
Для Каждого C Как DataGridViewCell В R. Cells
Если Не С. Стоимость Ничего
StrExport &= """" & C. значение.ToString & ""","
Еще
StrExport &ампер;= """" &ампер; "" &амп; ""","
Конец, Если
Следующий
StrExport = StrExport.Substring(0, StrExport.Длина - 1)
StrExport &= Environment.NewLine
- Если clmSelected.Выбран = Ложь Тогда
- Перейти в следующий ряд ?????
Следующий
Дим ТВт как системы.ИО.Textwriter В = Новой Системы.ИО.Модулю Записи StreamWriter("E:\SAT\Work.io\Work.io\bin\Debug\Session.csv", Ложные)
tw.Write(StrExport)
ТВт.Рядом()
Конец Подводной Лодки
End Класса

OriginalGriff

Перестаньте гадать, начните думать.
В каком столбце находится флажок? А вы знаете?

Shaheer Rizwan

да 8-й столбец, clmSelected

OriginalGriff

Правильно. Таким образом, для каждой строки у вас есть столбец, содержащий флажок.
Поэтому прямо в верхней части цикла для всех строк получите значение столбца текущего флажка строки.
Это не "одно значение" - вам нужно использовать текущий DataGridViewRow для доступа к определенному столбцу по его индексу - 7 для 8-го столбца или по строковому имени.

Ты можешь это сделать? Если это так, поместите его в качестве первой строки кода внутри цикла Rows и покажите мне строку For Each loop и строку кода непосредственно под ней.

Shaheer Rizwan

как бы я назвал это под событием нажатия кнопки? Я знаю, что вы называете его e.ColumnIndex=, когда это событие связано с DataGridView.

Shaheer Rizwan

Кроме того я прошу прощения за то что так сильно беспокою вас я просто напряжен и мне нужно закончить этот проект :(

OriginalGriff

Объект DataGridViewRow, который изменяется каждый раз вокруг вашего цикла строк, содержит свойство Cells: как вы думаете, что это содержит? Как вы думаете, как получить к нему доступ?

Shaheer Rizwan

Ну я кое что сделал и получил это