2010-07-07 74 views
0

在编辑模式中是否有简单的方法在细节视图中修改值?我尝试修改数据库查询来修剪这些值,但它不喜欢在这之后执行两种数据绑定。我试图通过文本框自己的所有属性,并没有发现任何东西。在数据绑定时在asp.net detailsview中修改值

我知道我可以为数据绑定事件添加一个事件处理程序,并逐个设置所有的值,但这是一个应用程序,自从我就职之前就已存在,并且在此详细信息视图中有超过40个值,所有这些文本框中的表面上看起来随机的名称与他们所代表的值或明显的命名方案几乎没有关系。

我想也许有一种方法来遍历DetailsView.Fields属性,但无法找到任何东西。我不允许将模式从CHAR更改为VARCHAR。任何其他快速的想法?这个页面很有可能会再次发生变化,并且我希望有一些可能在未来增加任何新字段时处理此问题而无需额外工作。不幸的是,现在重新设计它并不是最重要的优先事项,所以快速解决使用这种怪物的一些头痛是我所需要的。

回答

4

声明:我已经在GridView上使用了这个,而不是DetailsView,但这个概念是一样的。

创建EditItemTemplateField,将数据绑定到文本框,将其转换为字符串并修剪字符串。

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

编辑:这不起作用,因为你不能在绑定数据时执行转换,只有当不幸使用Eval时。

另一种方法是在DetailsView更新时遍历每个控件。

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

注意,这个例子假定您的网页上的所有控件都是字符串,如果他们不是你必须将它们排除在外。

+0

+1 - 绑定表达式适用于所有模板控件。 – womp 2010-07-07 21:43:46

+0

正是我在找什么,谢谢。正试图通过设计师和事件来做事,甚至没有想到页面标记。 – 2010-07-08 13:20:24

+0

实际上,当我尝试这样做时,它最终给了我一个错误:“对Bind的调用没有很好地格式化。请参阅文档以获取绑定的正确参数。仍在寻找解决方法;有任何想法吗? – 2010-07-08 14:42:51

相关问题