Ответ ...
Заполнение 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();
}
}
НО!
Если у вас есть пользовательская форма, как у меня
<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
}
Но если вы хотите заполнить некоторые значения формы из-за кода, убедитесь, что в EditForm нет методов #bind
<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...
}
Веселитесь