Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / проверить выделена ли строка перед удалением из datagridview? / 13 сообщений из 13, страница 1 из 1
18.06.2013, 11:05
    #38301157
Scherbakov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить выделена ли строка перед удалением из datagridview?
хочу удалить строку из грида
при загрузке грида выделяю по умолчанию первую строку:
Код: c#
1.
dataGridView.Rows[0].Selected = true


перед непосредственным удаление проверяю выделена ли хоть одна строка:
Код: c#
1.
2.
3.
4.
5.
if (dataGridView.SelectedRows.Count < 1)
{
   MessageBox.Show("Не выбрана запись!");
   return;
}


а потом удаляю её из дататэйбла, который является источником данных для грида:
Код: c#
1.
m_MainGrid.Rows[dataGridView.CurrentRow.Index].Delete();


так вот если пользователь не ткнул ни в одну строку, то при попытке определить индекс выбранной строки
Код: c#
1.
dataGridView.CurrentRow.Index


программа рушится
подскажите что не так делаю?
...
Рейтинг: 0 / 0
18.06.2013, 11:19
    #38301182
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить выделена ли строка перед удалением из datagridview?
Scherbakov,

используй bindingsource и bindingnavigator для таких дел
...
Рейтинг: 0 / 0
18.06.2013, 11:30
    #38301204
Scherbakov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить выделена ли строка перед удалением из datagridview?
Pallarisиспользуй bindingsource и bindingnavigator для таких дел
неужели без смены источника данных эту проблему никак не решить?
...
Рейтинг: 0 / 0
18.06.2013, 11:39
    #38301226
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить выделена ли строка перед удалением из datagridview?
Scherbakovтак вот если пользователь не ткнул ни в одну строку, то при попытке определить индекс выбранной строки
Код: c#
1.
dataGridView.CurrentRow.Index



программа рушится
подскажите что не так делаю?
Код: c#
1.
2.
3.
var currentIndex = -1; //ничего не выделено
if(dataGridView.CurrentRow != null)
 currentIndex = dataGridView.CurrentRow.Index;



но предыдущий автор правльно сказал работай с bindingsource
...
Рейтинг: 0 / 0
18.06.2013, 11:46
    #38301241
Scherbakov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить выделена ли строка перед удалением из datagridview?
pation,
Спасибо, помогло!
у меня источником является datatable.
под .net пишу впервые, только знакомлюсь, впрочем как и с C#
почему лучше использовать bindingsource?
просто много уже написано с использованием именно datatable
не хотелось бы все переписывать.
...
Рейтинг: 0 / 0
18.06.2013, 13:05
    #38301437
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить выделена ли строка перед удалением из datagridview?
Scherbakovпочему лучше использовать bindingsource?
по многим причинам
The BindingSource component serves many purposes. First, it simplifies binding controls on a form to data by providing currency management, change notification, and other services between Windows Forms controls and data sources. This is accomplished by attaching the BindingSource component to your data source using the DataSource property. For complex binding scenarios you can optionally set the DataMember property to a specific column or list in the data source. You then bind controls to the BindingSource. All further interaction with the data is accomplished with calls to the BindingSource component. For examples on how the BindingSource can simplify the binding process, see How to: Bind Windows Forms Controls to DBNull Database Values and How to: Handle Errors and Exceptions that Occur with Databinding. Navigation and updating of the data source is accomplished through methods such as MoveNext, MoveLast, and Remove. Operations such as sorting and filtering are handled through the Sort and Filter properties. For more information on using sorting and filtering with the BindingSource, see How to: Sort and Filter ADO.NET Data with the Windows Forms BindingSource Component.
...
Рейтинг: 0 / 0
18.06.2013, 13:16
    #38301479
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить выделена ли строка перед удалением из datagridview?
Scherbakovне хотелось бы все переписывать.

Ничего переписывать не надо:
Код: c#
1.
2.
3.
4.
DataTable dt_ = ...;
BindingSource bs_ = dt_;
dataGridView1.DataSource = bs_;
bindingNavigator1.BindingSource = bs_;
...
Рейтинг: 0 / 0
18.06.2013, 13:17
    #38301482
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить выделена ли строка перед удалением из datagridview?
ошибся
Код: c#
1.
2.
3.
4.
5.
DataTable dt_ = ...;
bs_ = new BindingSource();
bs_.DataSource = dt_;
dataGridView1.DataSource = bs_;
bindingNavigator1.BindingSource = bs_;
...
Рейтинг: 0 / 0
18.06.2013, 15:34
    #38301797
Scherbakov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить выделена ли строка перед удалением из datagridview?
Pallaris,

я имел ввиду, что много обработок вставки и обновления данных в гриде написано через соответствующие операции с datatable.
хотя может быть лучше потратить время на то чтоб переписать, и не мучиться потом.
вот еще вопрос:
удаляю строку из датагридвью
а вернее удаляю её из дататэйбла
в обработчике кнопки удалить пишу:
Код: c#
1.
2.
3.
4.
5.
6.
7.
if (DataGridView1.CurrentRow == null) //поверяю выбрана ли запись
{
	MessageBox.Show("Не выбрана запись!");
	return;
}  
DataTable.RowDeleted += rowDeleted; //вызываю обработчик события удаления строки
DataTable.Rows[DataGridView1.CurrentRow.Index].Delete();

[/SRC]
в обработчике события удаления делаю следующее:
Код: c#
1.
2.
3.
4.
5.
6.
DataRow[] delRows = DataTable.Select(null, null, DataViewRowState.Deleted); //пихаю в массив помеченную на удаление строку
DataRow row;
MessageBox.Show(delRows.Length.ToString()); //убеждаюсь что массив не пуст, возвращает 1
row = delRows[0]; //присваиваю эту единственную строку объекту DataRow
String r;
r = row[0].ToString(); //присваиваю первый столбец строки переменной (впринципе пробовал любой столбец)


а дальше при попытке вывести на экран результат просто ничего не происходит
Код: c#
1.
MessageBox.Show(r);


в чем проблема, почему окно сообщения не появляется вообще?
...
Рейтинг: 0 / 0
18.06.2013, 15:57
    #38301860
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить выделена ли строка перед удалением из datagridview?
Scherbakovхотя может быть лучше потратить время на то чтоб переписать, и не мучиться потом.


Ты разок попробуй, чтоб понять. Я тоже когда-то такой фигней страдал, как у тебя.
...
Рейтинг: 0 / 0
18.06.2013, 16:07
    #38301879
Scherbakov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить выделена ли строка перед удалением из datagridview?
Pallaris,

уже ушел думать в этом направлении, ибо даже на взгляд новичка это на изврат смахивает))
но все же, интереса ради, по вопросу есть какие-нибудь предположения?
...
Рейтинг: 0 / 0
18.06.2013, 16:51
    #38301960
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить выделена ли строка перед удалением из datagridview?
Scherbakovв чем проблема, почему окно сообщения не появляется вообще?

Ну разве что падает какой-то экспешн, который попадает в "тихий" обработчик catch{}
...
Рейтинг: 0 / 0
18.06.2013, 16:57
    #38301973
Scherbakov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить выделена ли строка перед удалением из datagridview?
Pallaris,
Извини, помучаю еще вопросом...
посоветуй материал для изучения
желательно что было что посмотреть о работе с datagridview посредством bindingsource и bindingnavigator
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / проверить выделена ли строка перед удалением из datagridview? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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