2011-06-13 73 views
0

即时使用Devexpress ASPxGridView的项目,但有问题与数据填充自定义EditForm。使用Devexpress ASPxGridView为一个项目填充ASPxTextBox和ASPxListBox代码隐藏

它看起来如下

<Templates> 
    <EditForm> 
     Company Name: 
     <dx:ASPxTextBox ID="CompanyName" runat="server" Value="<% #Bind('CompanyName') %>" /> 
     Parent: 
     <dx:ASPxListBox ID="ParentGuid" runat="server" Value="<% #Bind('ParentGuid') %>" /> 
    </EditForm> 
</Templates> 

一般情况下我喜欢写东西

protected void ASPxGridView1_StartRowEditing(object sender, DevExpress.Web.Data.ASPxStartRowEditingEventArgs e) 
{ 
    var CompanyList = db.companies.OrderBy(x => x.CompanyName).ToList(); 
    ASPxListBox ParentGuid = (ASPxListBox)ASPxGridView1.FindControl("ParentGuid"); 
    ParentGuid.DataSource = CompanyList; 
    ParentGuid.DataBind(); 

    ASPxTextBox CompanyName = (ASPxTextBox)ASPxGridView1.FindControl("CompanyName"); 
    CompanyName.Text = "Some company name"; 
} 

但是,这不会工作。任何建议从哪里开始?该文档并没有真正覆盖自定义表单:/

谢谢!

== UPDATE ==

使用onhtmleditformcreated = “ASPxGridView1_HtmlEditFormCreated” 与方法

protected void ASPxGridView1_HtmlEditFormCreated(object sender, ASPxGridViewEditFormEventArgs e) 
{ 
    Control CompanyName = ASPxGridView1.FindEditFormTemplateControl("CompanyName"); 
    if (CompanyName != null) 
    { 
     ASPxTextBox CompanyNameEdit = CompanyName as ASPxTextBox; 
     CompanyName.Text = "Some Co"; 
    } 

} 

,我使用值=” <%#Bind的事实( '公司名称')尝试%>“混乱了一点。如果我删除绑定框填充,但是我没有办法获取它们中的数据。任何方式在这个?

回答

1

答案是...

来填充ASPxComboBox称为CompanyList

protected void ASPxGridView1_HtmlEditFormCreated(object sender, ASPxGridViewEditFormEventArgs e) 
{ 
    Control ParentGuidControl = ASPxGridView1.FindEditFormTemplateControl("ParentGuid"); 
    if (ParentGuidControl != null) 
    { 
     ASPxComboBox ParentGuid = (ASPxComboBox)ParentGuidControl; 

     var CompanyList = db.companies.OrderBy(x => x.CompanyName); 
     ParentGuid.TextField = "CompanyName"; 
     ParentGuid.ValueField = "CompanyGuid"; 
     ParentGuid.DataSource = CompanyList; 
     ParentGuid.DataBind(); 
    } 
} 

BUT!

如果你有一个自定义窗体就像我

<Templates> 
    <EditForm> 
     Company Name: 
     <dx:ASPxTextBox ID="CompanyName" runat="server" Value="<% #Bind('CompanyName') %>" /> 
     Parent: 
     <dx:ASPxComboBox ID="ParentGuid" runat="server" Value="<% #Bind('ParentGuid') %>" /> 
    </EditForm> 
</Templates> 

你不会是能够从后台代码填充它,该#bind方法是在方式和覆盖任何其他传入值。然而,如果你不打算从背后这里代码填充它们是一个巧妙的方法来获取数据...

protected void ASPxGridView1_RowInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e) 
{ 
    IDictionaryEnumerator enumerator = e.NewValues.GetEnumerator(); 

    string CompanyName = string.Empty; 
    Guid ParentGuid = Guid.Empty; 

    enumerator.Reset(); 
    while (enumerator.MoveNext()) 
     if (enumerator.Key.ToString() == "CompanyName") 
      CompanyName = enumerator.Value.ToString(); 
     else if (enumerator.Key.ToString() == "ParentGuid") 
      ParentGuid = new Guid(enumerator.Value.ToString()); 

    // Do insert trick here 

} 

但是,如果你想填补一些从代码隐藏表单值的保证没有#bind在EditForm

<Templates> 
    <EditForm> 
     Company Name: 
     <dx:ASPxTextBox ID="CompanyName" runat="server" /> 
     Parent: 
     <dx:ASPxComboBox ID="ParentGuid" runat="server" /> 
    </EditForm> 
</Templates> 

填充方法,在这篇文章的顶部描述,并获取这样

protected void ASPxGridView1_RowInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e) 
{ 
    string CompanyName = string.Empty; 
    Guid ParentGuid = Guid.Empty; 

    // This method is a bit more secure 
    Control CompanyNameControl = ASPxGridView1.FindEditFormTemplateControl("CompanyName"); 
    if (CompanyNameControl != null) 
    { 
     ASPxTextBox CompanyNameTb = (ASPxTextBox)CompanyNameControl; 
     CompanyName = CompanyNameTb.Text.ToString(); 
    } 

    // A bit less secure, but lesser code 
    ASPxComboBox ParentGuidControl = (ASPxComboBox)ASPxGridView1.FindEditFormTemplateControl("ParentGuid"); 
    ParentGuid = new Guid(ParentGuidControl.SelectedItem.Value.ToString()); 

    // Do insert... 

} 

值玩得开心

1

,您应该使用一个稍微不同的方法:

使用HtmlEditFormCreated事件来设置编辑属性。要获得编辑器实例,请使用gridView的FindEditFormTemplateControl方法。

+0

发现一个,但没有运气,更新我的片段上面。 – 2011-06-13 10:14:56

+0

更正,但做的工作,但我使用Value =“<%#Bind('CompanyName')%>”的事实弥补了一点。任何方式在这个? – 2011-06-13 10:27:48

+0

如果使用绑定表达式,则不需要直接设置编辑器的值。它应该被自动设置。这是一个这个功能的例子:http://demos.devexpress。COM/ASPxGridViewDemos/GridEditing/TwoWayBinding.aspx – 2011-06-13 11:46:38