如何修改 DetailsView Databound 事件中的数据

发布于 2024-08-20 11:35:23 字数 858 浏览 6 评论 0原文

我在 aspx 页面中使用带有 sqldatasource 的详细信息视图。 我正在尝试对某些字段进行一些预处理和后处理 - 基本上是将 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() ;

这让我心烦意乱。我确信我错过了一些(不止一件事)明显的东西!

我想我希望做一些更像我的 ItemUpdating 的事情...

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

I'm using a detailsview with an sqldatasource in the aspx page.
I'm trying to do some pre and post processing on some of the fields - basically to convert a html list to a newline separated list for editing and back to html to store in the database.

The post-processing in ItemUpdating is easy enough but the pre-processing in DataBound is messy...

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);
        }
    }
}

Its the fragility of

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

that upsets me. I'm sure I am missing something (more than one thing) obvious!

I guess I was hoping to do something more like my ItemUpdating...

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

最美的太阳 2024-08-27 11:35:23

切换到 Asp.Net 4.0+ 并使用 ObjectDataSource

ObjectDataSource.TypeName 设置为数据访问对象 Type.FullName
ObjectDataSource.DataObjectTypeName 设置为 DTO Type.FullName
ObjectDataSource.SelectMethod 设置为获取 IQueryable 的数据访问对象方法。
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);

Switch to Asp.Net 4.0+ and use ObjectDataSource.

Set ObjectDataSource.TypeName to the data access object Type.FullName.
Set ObjectDataSource.DataObjectTypeName to the DTO Type.FullName.
Set ObjectDataSource.SelectMethod to the data access object method that get a IQueryable<MyDto>.
Set DetailsView1.DataSourceID to ObjectDataSource.ID.
Set DetailsView1.ItemType to the DTO Type.FullName.

And does somthing like this:

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文