Страница: 1 |
Страница: 1 |
Вопрос: DataGridView -> DataRow.RowState
Добавлено: 11.06.08 17:41
Автор вопроса: Shota
Идея такая: загнать данные в DataGridView и по мере редактирования/добавления/удаления этих самых данных показывать юзеру состояние строки находящееся в DataRow.RowState.
Пока придумал 2 решения, но ни одно из них не могу реализовать:
1. Подсвечивать разными цветами нетронутые, удаленные, добавленные и измененные строки.
2. добавить колонку без привязки к таблице, но чтоб в ней отображалось текстовое значение DataRowState Enumeration.
Как это можно реализовать?........
Ответы
Всего ответов: 2
Номер ответа: 1
Автор ответа:
Shota
Вопросов: 22
Ответов: 52
Профиль | | #1
Добавлено: 12.06.08 08:49
Решил обе проблемы, если кому интересно ( правда код на С шарп...... кому нужно тот поймет ):
Переменные уровня формы:
 ataGridViewCellStyle _unchanged = new DataGridViewCellStyle();
 ataGridViewCellStyle _modified = new DataGridViewCellStyle();
 ataGridViewCellStyle _detached = new DataGridViewCellStyle();
 ataGridViewCellStyle _deleted = new DataGridViewCellStyle();
 ataGridViewCellStyle _added = new DataGridViewCellStyle();
Конструктор:
public Form1()
{
InitializeComponent();
this._unchanged.BackColor = Color.White;
this._modified.BackColor = Color.Yellow;
this._deleted.BackColor = Color.Red;
this._added.BackColor = Color.GreenYellow;
this._detached.BackColor = Color.Gray;
}
tExpDataGridView - датаГирд
colState - колонка не привязанная к данным таблицы
Событие RowPrePaint:
private void tExpDataGridView_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
if (tExpDataGridView.Rows[e.RowIndex].DataBoundItem != null)
{
MyDataSet.tExpRow row = (MyDataSet.tExpRow)((DataRowView)tExpDataGridView.Rows[e.RowIndex].DataBoundItem).Row;
tExpDataGridView.Rows[e.RowIndex].ReadOnly = false;
switch(row.RowState)
{
case DataRowState.Added:
tExpDataGridView.Rows[e.RowIndex].DefaultCellStyle = this._added;
tExpDataGridView.Rows[e.RowIndex].Cells["colState"].Value = "Added";
break;
case DataRowState.Deleted:
tExpDataGridView.Rows[e.RowIndex].DefaultCellStyle = this._deleted;
tExpDataGridView.Rows[e.RowIndex].Cells["colState"].Value = "eleted";
tExpDataGridView.Rows[e.RowIndex].ReadOnly = true;
break;
case DataRowState.Detached:
tExpDataGridView.Rows[e.RowIndex].DefaultCellStyle = this._detached;
tExpDataGridView.Rows[e.RowIndex].Cells["colState"].Value = "etached";
break;
case DataRowState.Modified:
tExpDataGridView.Rows[e.RowIndex].DefaultCellStyle = this._modified;
tExpDataGridView.Rows[e.RowIndex].Cells["colState"].Value = "Modified";
break;
case DataRowState.Unchanged:
tExpDataGridView.Rows[e.RowIndex].DefaultCellStyle = this._unchanged;
tExpDataGridView.Rows[e.RowIndex].Cells["colState"].Value = "Unchanged";
break;
}
}
}
Detached - видно в момент добавления новой строки, как только строка теряет фокус состояние становиться Added
Номер ответа: 2
Автор ответа:
Shota
Вопросов: 22
Ответов: 52
Профиль | | #2
Добавлено: 12.06.08 08:52
Единственная проблема сортировать можно по всем колонкам таблицы кроме colState ( т.е. колонки которая показывает состояние строки )
а хотелось бы ...... если кто поможет........