Редактирование данных в RadGridView - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь отредактировать ячейку в RadGridView, у которой есть источник данных, установленный из данных из представления SQL.

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

Как только пользователь вводит данные в ячейку и покидает ячейку, появляется сообщение об ошибке «Указанный метод не поддерживается».

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

Я заполняю таблицу:

using (SqlConnection con = new SqlConnection(mydatasource))
{
    con.Open();
    SqlCommand cmd = new SqlCommand("select SRID, Name, Result from EditBatchResultsView where SRID = " + drpSRID.Text, con);
    SqlDataReader reader = cmd.ExecuteReader();

    radGridView1.DataSource = reader;
}

1 Ответ

0 голосов
/ 27 февраля 2019

Согласно документации привязки данных RadGrid , свойство DataSource принимает экземпляры следующих типов:

  • DataSet
  • DataTable
  • DataView
  • Массив DataRow
  • Любая коллекция объектов, которая реализует эти интерфейсы:
    • IListSource
    • IList
    • IEnumerable
    • ICustomTypeDescriptor

По данным контрольной проверки, SqlDataReader не поддерживается, поскольку он не реализует упомянутые выше интерфейсы, поэтому NotSupportedException сгенерировал при непосредственном связывании содержимого SqlDataReader в свойство DataSource.

В качестве обходного пути вы можетесоздайте новый экземпляр DataTable и заполните его содержимое из SqlDataReader следующим образом:

var dt = new DataTable();

using (SqlConnection con = new SqlConnection(mydatasource))
{
    con.Open();
    SqlCommand cmd = new SqlCommand("select SRID, Name, Result from EditBatchResultsView where SRID = " + drpSRID.Text, con);
    SqlDataReader reader = cmd.ExecuteReader();

    // fill DataTable contents
    dt.Load(reader);

    // assign DataTable as data source instead
    radGridView1.DataSource = dt;
}

// DataBind goes here

Примечание:

Конкатенация строк для построения SQL-запроса может быть склонна кSQL-инъекция.Использование параметров при передаче значения управления сервером в запрос SQL является более рекомендуемым способом:

var dt = new DataTable();

using (SqlConnection con = new SqlConnection(mydatasource))
{
    con.Open();
    SqlCommand cmd = new SqlCommand("select SRID, Name, Result from EditBatchResultsView where SRID = @SRID", con);
    cmd.Parameters.Add("@SRID", SqlDbType.VarChar).Value = drpSRID.Text;
    SqlDataReader reader = cmd.ExecuteReader();

    // fill DataTable contents
    dt.Load(reader);

    // assign DataTable as data source instead
    radGridView1.DataSource = dt;
}

Проблема, связанная с данной:

Заполнение таблицы данных из устройства чтения данных

...