как изменить данные в событии привязки данных DetailsView - PullRequest
1 голос
/ 03 февраля 2010

Я использую подробное представление с sqldatasource на странице aspx.Я пытаюсь выполнить некоторую предварительную и последующую обработку некоторых полей - в основном, чтобы преобразовать список html в список, разделенный новой строкой, для редактирования и обратно в html для хранения в базе данных.

Постобработкав ItemUpdating это достаточно просто, но предварительная обработка в DataBound грязная ...

protected void DetailsView1_DataBound(object sender, EventArgs e)
{
    if (DetailsView1.Rows.Count > 2)
    {
        string s =((DataRowView)DetailsView1.DataItem).Row.ItemArray[2].ToString();


        TextBox box1 = (TextBox) DetailsView1.FindControl("textbox1");
        if (box1 != null)
        {
            box1.Text = preprocess(s);
        }
    }
}

Хрупкость

string s=((DataRowView)DetailsView1.DataItem).Row.ItemArray[2].ToString();

меня расстраивает.Я уверен, что упускаю что-то (более чем одно) очевидное!

Наверное, я надеялся сделать что-то более похожее на обновление моего предмета ...

e.NewValues["threeline"] = postprocess(e.NewValues["threeline"].ToString());

1 Ответ

0 голосов
/ 08 мая 2017

Переключитесь на Asp.Net 4.0+ и используйте ObjectDataSource.

Установите ObjectDataSource.TypeName для объекта доступа к данным Type.FullName.
Установите ObjectDataSource.DataObjectTypeName в DTO Type.FullName.
Установите ObjectDataSource.SelectMethod для метода объекта доступа к данным, который получает IQueryable<MyDto>. Установите DetailsView1.DataSourceID на ObjectDataSource.ID.
Установите DetailsView1.ItemType в DTO Type.FullName.

И делает что-то вроде этого:

var item = DetailsView1.DataItem as MyDTO;
if(item == null)
    return;

var box1 = (TextBox) DetailsView1.FindControl("textbox1");
if (box1 == null)
    return;

box1.Text = preprocess(item.PropertyName);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...