powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
25 сообщений из 25, страница 1 из 1
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38010330
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,

У меня есть datagridview, привязанный к таблице. Пользователи могут изменять значения в двух столбцах этого datagridview и сохранять по кнопке SvBtn. Программно по клику мышки по строке меняется цвет ячеек этой строки на жёлтый (BackColor и SelectionBackColor), кроме ячеек столбцов с редактируемыми значениями.
Нужно по кнопке SvBtn сохранять в таблицу значения ячеек только тех строк, которые выделены цветом. Т.е. цвет редактрируемых ячеек не меняется, но меняется цвет остальных ячеек в строке и нужно только эти строки сохранять.
Как это сделать?
Я пока сохраняю так:
Код: c#
1.
2.
3.
4.
5.
   this.Validate();
                this.TotalDataBindingSource.EndEdit();
                this.TotalDataTableAdapter.Adapter.UpdateCommand.Parameters["@type"].Value = type;
                this.TotalDataTableAdapter.Update(this.MyDataSet.TotalData);
                this.TotalDataTableAdapter.Fill(this.MyDataSet.TotalData, param1, param2, text, type);


Но при этом сохраняется всё.
Спасибо!
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38010653
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Andemki,

Пока могу сказать только что

this.TotalDataTableAdapter.Fill(this.MyDataSet.TotalData, param1, param2, text, type);

лишнее
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38011513
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2,

Да, согласен.
Может быть находить подсвеченные строки в гриде и обновлять соответствующие строки в таблице с помощью TableAdapter.Update(DataRow)?
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38011559
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndemkiCat2,

Да, согласен.
Может быть находить подсвеченные строки в гриде и обновлять соответствующие строки в таблице с помощью TableAdapter.Update(DataRow)?Ну дык тогда надо отвязаться от таблицы, чтоб Binding не изменял записи, а изменяли Вы.
Что-то там у Вас с кодом много всего, а зачем после Update делать Fill ????
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38011641
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fortibransa,

Да думал что надо делать перезагрузку TableAdapter после апдейта.
Написал пока вот так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
foreach (DataGridViewRow r in dataGridView1.Rows)
            {
                if (r.DefaultCellStyle.BackColor == Color.Yellow)
                {
                    int rowindex = r.Index;
                    DataRow UpdRow = this.MyDataSet.TotalData.Rows[rowindex];
                    this.Validate();
                    this.TotalDataBindingSource.EndEdit();
                    this.TotalDataTableAdapter.Adapter.UpdateCommand.Parameters["@type"].Value = type;
                    this.TotalDataTableAdapter.Update(UpdRow);
                   this.TotalDataTableAdapter.Fill(this.MyDataSet.TotalData, param1, param2, text, type); //обновляем всю таблице, чтобы повялись корректировки в остальных столбцах
                }
                else
                    this.TotalDataTableAdapter.Fill(this.MyDataSet.TotalData, param1, param2, text, type); //перезагружаем таблицу, чтобы удалить, то что ввёл пользователь и вернуть как было
}



Работает только для первой строки в гриде и почему-то не обновляется TableAdapter
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38011647
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andemki,

Грид стал обновляться после того, как начал делать перезагрузку TableAdapter :)
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38011650
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем вот это мне и надо, но только чтобы работало для всех строк, а не только для первой :)
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38011716
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так всё заработало:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  foreach (DataGridViewRow r in dataGridView2.Rows)
            {
                if (r.DefaultCellStyle.BackColor == Color.Yellow)
                {
                    int rowindex = r.Index;
                    DataRow UpdRow = this.MyDataSett.TotalData.Rows[rowindex];
                    this.Validate();
                    this.TotalDataBindingSource.EndEdit();
                    this.TotalDataTableAdapter.Adapter.UpdateCommand.Parameters["@type"].Value = type;
                    this.TotalDataTableAdapter.Update(UpdRow);

                }
            }
this.TotalDataTableAdapter.Fill(this.MyDataSet.TotalData, param1, param2, text, type);
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38011785
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жуткий говнокод. А главное зачем?
Насколько я помню при редактирование изменяется DataRow.RowState и адаптер выполняет UpdateCommand только для тех строк, у которых RowState == DataRowState.Modified.
Для тех, у которых RowState == DataRowState.Add выполняется InsertCommand; для тех, у которых RowState == DataRowState.Deleted - DeleteCommand.
Почитали бы документацию :)

P.S.: в будущем проверяйте состояние данных, а не контролов, их отображающих.
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38011882
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,

А как это к цвету можно привязать? Мне нужно, чтобы UpdateCommand выполнялась только для тех строк, у которых цвет жёлтый, а не только при изменении значения ячейки в строке.
Жуткий говнокод возможен, т.к. только начинаю с этим работать :) Вот мне и интересно как это правильней реализовать.
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38011987
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andemki,
skyANA правильно сказал, работайте с данными а не с представлением.
Что до задачи, подкрашивание то да сё, да меняем цвет, да по цвету определяем, вам не кажется что это на педерастию
смахивает, надо взрослеть в строну иксовых shello, вот и 2112 по это заточили а?
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38012066
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,

Ну вот такая если задача - сохранять значения только в жёлтых строках. Если можно это сделать не обращаясь к цвету, то приведите пример пожалуйста грамотного кода! :)
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38012098
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andemki,
Я дальтоник,для меня нет желтого цвета, отсюда и то что вы написали гумно..
делайте метку на обновлении в данных, а не в представлении.
а потом как сказал skyANA и в перед.
зы примеры с DS, да я вырос из него, уже много лет с ним не работаю..
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38012112
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,

А это вообще возможно, если у меня в гриде есть строки белого, серого, коричневого и жёлтого цвета и мне надо менять данные только в жёлтых строках, а во всех остальных не менять? Т.е. если ввели значение в серую строку, то Update в таблице не проводим.
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38012131
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот так ещё можно загавнокодить, уже без цвета:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
     private List<int> selectedRowIndexes = new List<int>();
 private void SvBtn_Click(object sender, EventArgs e)
        {
 foreach (DataGridViewRow r in dataGridView2.Rows)
            {
                if (this.selectedRowIndexes.IndexOf(r.Index) > -1)
                {
                    DataRow UpdRow = MyDataSet.TotalData.Rows[r.Index];
                    this.Validate();
                    this.TotalDataBindingSource.EndEdit();
                    this.TotalDataTableAdapter.Adapter.UpdateCommand.Parameters["@type"].Value = type;
                    this.TotalDataTableAdapter.Update(UpdRow);

                }
            }
}
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38012138
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так уж сложилось, что в программировании можно все.
Можно сделать редактирование голосом - но как быть глухонемым, можно по цвету - но как быть дальтоникам,
можно вытащить на грид 500 записей и люди с плохим зрением замаются крутить перемотку, или шарить лупой по экрану.
не проще ли добавь залипающую кнопку, которая выводила бы на грид строки разрешенные для редактирования и все....
Тут вопрос не в коде,( накодить можно все) а в самой архитектуре юайя
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38012141
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,

Ну тут ещё вопрос в требованиях к этому UI. А в требованиях как раз нужно сделать редактирование по жёлтому цвету. Это не я придумал :) Т.е. как дальтоники будут с этой программой работать - это вопрос к тому, кто придумал такие требования.
Тут пользователи сами выделяют по клику мышки жёлтым цветом те строки, которые нужно редактировать и только их нужно сохранять.
Идею с кнопкой можно конечно предложить. Если я правильно понял, то она будет фильтровать строки в гриде и отображать только те, которые можно редактировать? Но их сперва всё равно нужно ведь как-то выбрать :)
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38012399
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Методов реализации сего море, в основном будут говнокодерские (а как это еще называть).
Понимаешь грид это такой контрол который отображает некий массив данных, если не привязывать к неким данным грид (тупо грид.Rows.Add(ля, ля, гы) или у источника данных нету способа обновления своих данных от грида (тупо ну не знает источник что его данные поменялись) то тот массив данных не будет менятся от грида и ты можешь менять его сам как тебе вздумается, а если источник данных "знает" что его данные меняются от грида, тогда надо другой говнокод, (ну например, бегаешь по строчкам грида которые строчки не надо менять в источнике данных то им делаешь AcceptChanges (блин, тогда на гриде эти данные будут такими каким их сделал user а в источнике данных такие какие и были) или RejectChanges (тогда нахрен назад изменения которые user делал) , а которым надо менять то ничего не делаешь, ну и потом Update). Тока нахрена Fill, записал и снова прочитал??? Это надо только если например поле AutoIncrement и то в стандартном подходе в UpdateCommand там за UPDATE ила-ила, через точку с запятой идет сразу SELECT бла-бла.
Твою мать, накарякал, короче надо книжки читать и экспериментировать.
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38012438
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortibransa,
Единственный плюс в вашем коде - ему обфускатор не требуется..
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38012786
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndemkiГде-то в степи,

А это вообще возможно, если у меня в гриде есть строки белого, серого, коричневого и жёлтого цвета и мне надо менять данные только в жёлтых строках, а во всех остальных не менять? Т.е. если ввели значение в серую строку, то Update в таблице не проводим.Я перестал понимать, какая стоит задача в реальности :)
В реальности есть строки разного цвета? По какому принципу определяется цвет?
Или же пользователь может редактировать любые строки, но потом выделить среди них нужные, нажать "Сохранить".
Приложение должно отменить изменения в тех строках, что не выделены, но отредактированы, и сохранить выделенные.
И поэтому у Вас Fill после Update, чтобы визуально отменить редактирование не выделенных строк.
Так? :)
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38012933
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
Тут печалька (((..
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38013533
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,

Да, в гриде строки разного цвета. Цвет определяется исходя из того какой столбец был изменён пользователем когда-либо (это можно узнать из специального столбца в DataTable). И отдельно есть условие на выделение жёлтым цветом - если пользователь нажал на ячейку, то вся строка выделяется жёлтым цветом, если ещё раз нажмёт, то цвет строки меняется на изначальный, какой был при загрузки.
Да, пользователь может редактировать любые строки, но сохранятся должны именно жёлтые. Всё верно - приложение должно отменить изменения в тех строках, что не жёлтые.
Fill после Update ещё потому, что нужно получить изменения в остальных столбцах грида. Т.е. я ввожу какие-то новые значения, жму "Сохранить" и по этим данным меняются значения в остальных столбцах грида.
Если не указать Fill, то пользователь изменения в остальных столбцах грида не увидит после нажатия кнопки "Сохранить".
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38013536
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё-таки реализовал это с помощью списка selectedRowIndexes, который я указал в последнем примере кода. Если кому интересно, то могу показать, что у меня добавляется в список и как это работает.
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38013568
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fortibransa,

У меня грид привязан к таблице и изменения значений в гриде сохраняются в таблице.
Fill после Update для того, чтобы сделать перезагрузку данных в гриде, чтобы пользователь увидел изменения не только в тех столбцах, где он чего-то поменял, но и в остальных столбцах этого грида, которые автоматически поменялись после Update.
В любом случае нужно делать проверку, в каких строках сохранять изменения, а в каких нет. Не совсем понятно почему лучше бегать по строкам и использовать AcceptChanges или RejectChanges. Это лучше, чем бегать по строкам и проверять выбрана ли строка или нет?
...
Рейтинг: 0 / 0
Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
    #38013991
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да блин, если тебе не надо сохранять строку ей надо или Accept или Reject, сделать чтоб Update ее не загробастал. Ты в debag посмотри какие состояния строк, не которые не Unchanged они и пойдут обрабатывается Update, если "руками" сделаешь Accept или Reject то они станут Unchanged.
По Fill, если у тебя типизированный DataSet, короче если не сам городил все эти Command ы а студия сделала, то
в InsertCommand и UpdateCommand
ну например
Код: sql
1.
2.
INSERT INTO [DevsList] ([ID], [Name]) VALUES (@ID, @Name);
SELECT ID, Name FROM DevsList WHERE (ID = @ID)


Код: sql
1.
2.
UPDATE [DevsList] SET [ID] = @ID, [Name] = @Name WHERE (([ID] = @Original_ID) AND ([Name] = @Original_Name));
SELECT ID, Name FROM DevsList WHERE (ID = @ID)


это сама студия городит, и сразу обновятся чо там надо и не надо Fill
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сохранение значений в ячейках, выделенных цветом в DataGridView (C#)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]