Asp.net 将ASPxComboBox与ASPxGridView一起使用时,需要设置初始值

Asp.net 将ASPxComboBox与ASPxGridView一起使用时,需要设置初始值,asp.net,devexpress,aspxgridview,aspxcombobox,Asp.net,Devexpress,Aspxgridview,Aspxcombobox,我试图使用ASPxGridView来显示ASPxComboBox控件的列表。网格中的行和组合框中的选项列表都是从代码填充的。我在设置组合框的初始值时遇到问题 我希望它看起来像下图 正如您在屏幕截图中看到的,我已经能够填充网格视图和组合框,但是我不知道如何设置组合框的初始值 在内部组合框的Init事件中,没有明显的属性来检索绑定对象 我确实在StackOverflow上发现了几个其他问题,答案是在组合框中添加绑定属性。但是,将SelectedIndex='添加到InnerCombo的声明中会出

我试图使用
ASPxGridView
来显示
ASPxComboBox
控件的列表。网格中的行和组合框中的选项列表都是从代码填充的。我在设置组合框的初始值时遇到问题

我希望它看起来像下图

正如您在屏幕截图中看到的,我已经能够填充网格视图和组合框,但是我不知道如何设置组合框的初始值

  • 在内部组合框的Init事件中,没有明显的属性来检索绑定对象
  • 我确实在StackOverflow上发现了几个其他问题,答案是在组合框中添加绑定属性。但是,将
    SelectedIndex='
    添加到
    InnerCombo
    的声明中会出现错误“诸如Eval()、XPath()和Bind()等数据绑定方法只能在数据绑定控件的上下文中使用。”
以下是我目前掌握的情况:

Testing.aspx:

<%@ Page Title="" Language="C#" MasterPageFile="~/Light.master" 
    AutoEventWireup="true" CodeBehind="Testing.aspx.cs" Inherits="MyProject.Testing" %>

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
    <dx:ASPxGridView ID="MyGridView" runat="server" KeyFieldName="Name">
        <Columns>
            <dx:GridViewDataColumn FieldName="Name" />
            <dx:GridViewDataColumn FieldName="Level">
                <DataItemTemplate>
                    <dx:ASPxComboBox
                        runat="server"
                        ID="InnerCombo"
                        ValueField="ID"
                        TextField="Desc"
                        ValueType="System.Int32"
                        OnInit="InnerCombo_Init" />
                </DataItemTemplate>
            </dx:GridViewDataColumn>
        </Columns>
    </dx:ASPxGridView>

    <dx:ASPxButton runat="server" ID="btnSubmit" Text="Submit" OnClick="btnSubmit_Click" />
</asp:Content>

Testing.aspx.cs:

public partial class Testing : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
     if (!this.IsPostBack)
     {
        this.MyGridView.DataSource = GetDefaultSettings();
        this.MyGridView.DataBind();
     }
  }

  protected void btnSubmit_Click(object sender, EventArgs e)
  {
     Debug.WriteLine("btnSubmit_Click");

     for (int i = 0; i < MyGridView.VisibleRowCount; i++)
     {
        object[] row = (object[])MyGridView.GetRowValues(i, "Name", "Value");

        // row[1] is null, but we can get the data by finding the combo box itself.
        GridViewDataColumn col = (GridViewDataColumn)MyGridView.Columns["Value"];
        ASPxComboBox innerCombo = (ASPxComboBox)MyGridView.FindRowCellTemplateControl(i, col, "InnerCombo");

        Debug.WriteLine("{0} = {1}", row[0], innerCombo.Value);
     }
  }

  protected void InnerCombo_Init(object sender, EventArgs e)
  {
     Debug.WriteLine("InnerCombo_Init");

     ASPxComboBox innerCombo = sender as ASPxComboBox;
     if (innerCombo != null)
     {
        innerCombo.DataSource = GetValues();
        innerCombo.DataBind();
     }
  }

  private static List<ValueClass> GetValues()
  {
     // Simple for testing; actual method will be database access.
     return new List<ValueClass>()
     {
        new ValueClass(0, "Zero (default)"),
        new ValueClass(1, "One"),
        new ValueClass(2, "Two"),
        new ValueClass(3, "Three"),
     };
  }

  private static List<SettingClass> GetDefaultSettings()
  {
     // Simple for testing; actual method will be database access + post-processing.
     return new List<SettingClass>()
     {
        new SettingClass("AA", 0),
        new SettingClass("BB", 1),
        new SettingClass("CC", 0),
     };
  }

  public class ValueClass
  {
     public int ID { get; private set; }
     public string Desc { get; private set; }

     public ValueClass(int id, string desc)
     {
        this.ID = id;
        this.Desc = desc;
     }
  }

  public class SettingClass
  {
     public string Name { get; set; }
     public int Value { get; set; }

     public SettingClass(string name, int value)
     {
        this.Name = name;
        this.Value = value;
     }
  }
}
公共部分类测试:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!this.IsPostBack)
{
this.MyGridView.DataSource=GetDefaultSettings();
this.MyGridView.DataBind();
}
}
受保护的void btnsupmit\u单击(对象发送者,事件参数e)
{
Debug.WriteLine(“btnSubmit_Click”);
对于(int i=0;i
不熟悉ASPx控件,但这对我来说适用于传统的asp下拉列表:
SelectedValue=”
我尝试过,但它说“诸如Eval()、XPath()和Bind()等数据绑定方法只能在数据绑定控件的上下文中使用。”我认为
DataItemTemplate
设置正确,但是使用数据绑定可能需要有所不同。这是使用devexpress控件的许多陷阱之一。它们只是在现实世界中不可用。