编辑列表时需要下拉框的级联:下面用公司和公司部门为例
首先绑定列表数据时不能做级联限制否则下拉列表会显示不完全,这样就需要在点击添加和编辑的时候做筛选,还有就是选择下拉时筛选
在点击添加和编辑时的级联:
用事件:oncelleditorinitialize="aspxGridUser_CellEditorInitialize"
private int compid = -1;//保存公司ID
protected void aspxGridUser_CellEditorInitialize(object sender, ASPxGridViewEditorEventArgs e)
{
if (aspxGridUser.IsEditing && e.Column.FieldName == "CompanyId")
{
ASPxComboBox comboBox = e.Editor as ASPxComboBox;
if (comboBox.Value!=null)
{
compid = Convert.ToInt32(comboBox.Value.ToString());//公司ID
}
}
if (aspxGridUser.IsEditing && e.Column.FieldName == "DeptId")
{
ASPxComboBox comboBox = e.Editor as ASPxComboBox;
List<CompanyInfo> lst = new CompanyInfoService().GetCompanyDeptList(compid).ToList();//部门数据
comboBox.DataSource = lst;
comboBox.TextField = "CompanyName";
comboBox.ValueField = "Id";
comboBox.DataBind();
}
}
然后在页面中选择公司时,需要的联动,用js和ajax实现:
页面:
<dx:GridViewDataComboBoxColumn Caption="所属公司" VisibleIndex="13" FieldName="CompanyId" Width="10%" >
<PropertiesComboBox TextField="所属公司" ValueField="CompanyId" EnableSynchronization="False" ValueType="System.String" Spacing="0">
<ValidationSettings ErrorDisplayMode="ImageWithTooltip" > <RequiredField IsRequired="true" ErrorText="公司不能为空"/></ValidationSettings>
<ClientSideEvents SelectedIndexChanged="function(s, e) { OnDepChanged(s); }"></ClientSideEvents>
</PropertiesComboBox>
<Settings AutoFilterCondition="Equals"></Settings>
</dx:GridViewDataComboBoxColumn>
js:
function OnDepChanged(cmbCompancy) {
var comp = cmbCompancy;
var dep = aspxGridUser.GetEditor("DeptId");
$.ajax({
url: "GetUserDep.ashx",
data: { "comId": comp.GetValue() },
cache: false,
async: false,
success: function (data) {
var deplist = eval(data);
dep.ClearItems();
for (var i = 0; i<deplist.length ; i++) {
dep.AddItem(deplist[i].text, deplist[i].value);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
}
GetUserDep.ashx实现的代码:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string comId = context.Request["comId"].ToString();
List<CompanyInfo> lst = new CompanyInfoService().GetCompanyDeptList(Convert.ToInt32(comId)).ToList();
string dep = "";
for (int i = 0; i < lst.Count; i++)
{
dep += " {text:'" + lst[i].CompanyName + "',value:'" + lst[i].Id + "'}";
}
dep = "[" + dep + "]";
context.Response.Write(dep);
}
这样就可以实现联动了。
注:这样实现的联动在做验证时不能用后台验证了,只能做前台验证,否则联动就会失效