使用ASPxComboBox和ASPxGridView,需要设置初始值

时间:2015-10-26 21:53:40

标签: asp.net devexpress aspxgridview aspxcombobox

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

我正在寻找类似于下图的图片。

enter image description here

正如您在屏幕截图中看到的,我已经能够同时获得网格视图和要填充的组合框,但我无法弄清楚如何设置组合框的初始值。

  • 在内部组合框的Init事件中,没有明显的属性来检索绑定对象。
  • 我确实在StackOverflow上找到了其他几个问题,答案是在组合框中添加绑定属性。但是,将SelectedIndex='<%# Bind("Level") %>'添加到InnerCombo的声明中会给出错误&#34;数据绑定方法(如Eval(),XPath()和Bind())只能在a的上下文中使用数据绑定控制。&#34;

这是我到目前为止所拥有的:

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

0 个答案:

没有答案