开发者

Trim values in asp.net detailsview when databinding

Is there an easy way to trim values in a details view during edit mode? I tried modifying the database query to trim the values, but it didn't like to do both ways databinding after that. I tried looking through all the properties of the text boxes themselves and found nothing.

I know I could add an event handler for the databound event, and set all of 开发者_如何转开发the values one by one, but this is an application that has existed since before my employment and there are over 40 values in this details view, all in text boxes with seemingly random names that have little to do with the values they represent or obvious naming scheme.

I thought maybe there was a way to way to iterate over the DetailsView.Fields property, but couldn't figure anything out there either. I am not allowed to change the schema from CHAR to VARCHAR either. Any other quick ideas? There is a strong likelihood this page will change again, and I would like something that might take care of this problem for any new fields added in the future without extra work. Unfortunately, redesigning it is not anywhere near a top priority right now, so a quick fix to alleviate some of the headache of using this monstrosity is all I am looking for.


Disclaimer: I've used this on a GridView, not a DetailsView, but the concept is the same.

Create an EditItemTemplateField, Bind the data to the textbox, convert it to a string, and trim the string.

<Fields>
    <asp:TemplateField HeaderText="FirstName">
        <EditItemTemplate>
            <asp:TextBox ID="txtFirstName" Runat="server" Text='<%#Bind("FirstName").ToString().Trim() %>'/>
        </EditItemTemplate>
    </asp:TemplateField>
</Fields>

EDIT: This does not work, as you cannot perform conversions when binding data, only when Eval is used unfortunately.

The alternative is to iterate through each control when the DetailsView is updating.

void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
    for (int i = 0; i < e.NewValues.Count; i++)
    {
        if (e.NewValues[i] != null)
        {
            e.NewValues[i] = e.NewValues[i].ToString().Trim();
        }
    }
}

Note, this example assumes all controls on your page are strings, if they aren't you'll have to exclude them.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜