我有可编辑的ASPxGridView,但对如何填充ASPxComboBox初始化感到困惑。
考虑下面的场景,其中我们有一个带有颜色的汽车列表。

单击编辑后。

我想将数据源添加到这个突出显示的颜色组合框中。我的代码如下:
ASP代码
<dx:ASPxGridView ID="grid" runat="server" AutoGenerateColumns="False"
KeyFieldName="ID" onstartrowediting="ASPxGridView1_StartRowEditing">
<Columns>
<dx:GridViewCommandColumn VisibleIndex="0">
<EditButton Visible="True">
</EditButton>
</dx:GridViewCommandColumn>
<dx:GridViewDataTextColumn Caption="ID" FieldName="ID" Name="ID"
VisibleIndex="1">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="Car" FieldName="Car" Name="Car"
VisibleIndex="2">
<EditItemTemplate>
<dx:ASPxComboBox ID="ASPxComboBox1" runat="server"
Text='<%# Eval("Car") %>'>
</dx:ASPxComboBox>
</EditItemTemplate>
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="Color" FieldName="Color" Name="Color"
VisibleIndex="3">
<EditItemTemplate>
<dx:ASPxComboBox ID="colorCombo" runat="server">
</dx:ASPxComboBox>
</EditItemTemplate>
</dx:GridViewDataTextColumn>
</Columns>C#代码
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Car");
dt.Columns.Add("Color");
DataRow dr = dt.NewRow();
dr["ID"] = "1";
dr["Car"] = "Suzuki";
dr["Color"] = "Green";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["ID"] = "2";
dr["Car"] = "Toyota";
dr["Color"] = "Blue";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["ID"] = "3";
dr["Car"] = "Toyota";
dr["Color"] = "Black";
dt.Rows.Add(dr);
grid.DataSource = dt;
grid.DataBind();
}
protected void ASPxGridView1_StartRowEditing(object sender,
DevExpress.Web.Data.ASPxStartRowEditingEventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Color");
DataRow dr = dt.NewRow();
dr["ID"] = "1";
dr["Color"] = "Green";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["ID"] = "2";
dr["Color"] = "Blue";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["ID"] = "3";
dr["Color"] = "Black";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["ID"] = "4";
dr["Color"] = "Red";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["ID"] = "5";
dr["Color"] = "Yellow";
dt.Rows.Add(dr);
ASPxComboBox cb=(ASPxComboBox)grid.FindEditRowCellTemplateControl(
grid.Columns["Color"] as GridViewDataColumn
, "colorCombo");
cb.DataSource = dt;
cb.DataBind();
}在cb.Datasource =dt上设置断点后,将验证值是否已填充,但未在页面上查看。combobox的填充不能在page_load()上完成。如果有人知道解决方案,请用简单易懂的话告诉我。
注意:Datasource来自database,这里我只是用Pageload()对它进行了硬编码。
发布于 2013-03-30 00:42:24
您可以使用XML数据源执行此操作。这样,您就可以避免后面的代码,填充列表并显示当前颜色选择。您需要将GridViewDataTextColumn转换为GridViewDataComboBoxColumn,然后将XML数据源添加到其中。也可以添加一个xml数据源,只需右键单击App_Data文件夹,然后选择Add->New Item。选择一个xml文件并将其命名为colors.xml。代码如下:
XML:
<colors>
<item ID="1" Color="Green"></item>
<item ID="2" Color="Blue"></item>
<item ID="3" Color="Black"></item>
<item ID="4" Color="Red"></item>
<item ID="5" Color="Yellow"></item>
</colors>要添加到ASPX的行:
<asp:XmlDataSource ID="colorsXML" runat="server" DataFile="~/App_Data/colors.xml" XPath="colors/item" ></asp:XmlDataSource>更改:
<dx:GridViewDataTextColumn Caption="Color" FieldName="Color" Name="Color"
VisibleIndex="3">
<EditItemTemplate>
<dx:ASPxComboBox ID="colorCombo" runat="server">
</dx:ASPxComboBox>
</EditItemTemplate>
</dx:GridViewDataTextColumn>要这样做:
<dx:GridViewDataComboBoxColumn Caption="Color" FieldName="Color" Name="Color" VisibleIndex="3">
<PropertiesComboBox DataSourceID="colorsXML" ValueField="ID" TextField="Color"></PropertiesComboBox>
</dx:GridViewDataComboBoxColumn>删除StartRowEditing函数中的代码,您将不再需要它:
protected void ASPxGridView1_StartRowEditing(object sender, DevExpress.Web.Data.ASPxStartRowEditingEventArgs e)
{
}发布于 2013-03-30 02:21:11
我同意dcreight所展示的方法。
如果您使用objectdata source绑定您的组合框,您可以修改他建议的代码,如下所示:
<dx:GridViewDataComboBoxColumn Caption="Color" FieldName="ID" Name="Color" VisibleIndex="3">
<PropertiesComboBox DataSourceID="objColors" ValueField="ID" TextField="Color" ValueType="System.String"></PropertiesComboBox>
</dx:GridViewDataComboBoxColumn>请确保propertiescombobox的fieldname和valuefield匹配。还要在网格视图之外的代码中定义objectdatasource
<asp:ObjectDataSource ID="objColors" SelectMethod="GetColors" TypeName="ClassFileName"
runat="server"></asp:ObjectDataSource>https://stackoverflow.com/questions/15683564
复制相似问题