技术要点:按钮提交选择的项,选择的项必须客户端事件把选中项存入隐藏字段,服务端按钮点击获取隐藏字段的数据,另一个技术要点:无法获取的控件,用while循环把需要的控件寻找出来
<dx:ASPxHiddenField ID="ASPxHiddenField1" runat="server" ClientInstanceName="hiddenField" SyncWithServer="true">
</dx:ASPxHiddenField>
<script type="text/javascript">
function onCallbackStart() {
loadingPanel.Show(); // 显示加载面板
}
function onListBoxSelectionChanged(s, e) {
// 1. 获取所有选中项(返回 ASPxClientListEditItem 数组)
var items = s.GetSelectedItems();
// 2. 提取值和文本
var values = [];
var texts = [];
if (items != null) {
for (var i = 0; i < items.length; i++) {
values.push(items[i].value);
texts.push(items[i].text);
}
}
// 3. 赋值给 ASPxHiddenField(使用 Set 方法,键名自定义)
hiddenField.Set("SelectedValues", values.join(" "));
hiddenField.Set("SelectedTexts", texts.join(" "));
}
</script>
<dx:GridViewDataTextColumn Caption="校区" ShowInCustomizationForm="True" VisibleIndex="2" Width="26%">
<DataItemTemplate>
<dx:ASPxDropDownEdit ID="ASPxDropDownEdit_xq" runat="server" AnimationType="None" ClientInstanceName="checkComboBox_xq" Width="100%">
<DropDownWindowTemplate>
<dx:ASPxListBox ID="listBox_xq" runat="server" ClientInstanceName="checkListBox_xq"
SelectionMode="CheckColumn" Width="100%" >
<ClientSideEvents SelectedIndexChanged="onListBoxSelectionChanged" />
<Border BorderStyle="None" />
</dx:ASPxListBox>
<table style="width: 100%">
<tr>
<td style="padding: 4px">
<dx:ASPxButton ID="ASPxButton_qr_ygkzxq" runat="server" OnClick="ASPxButton_qr_ygkzxq_Click"
Text="确认所选" style="float: right">
<ClientSideEvents Click="function(s, e) {onCallbackStart();}" />
</dx:ASPxButton>
</td>
</tr>
</table>
</DropDownWindowTemplate>
</dx:ASPxDropDownEdit>
</DataItemTemplate>
<HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" />
<CellStyle HorizontalAlign="Left" VerticalAlign="Middle">
</CellStyle>
</dx:GridViewDataTextColumn>
protected void ASPxGridView_ygkz_HtmlRowPrepared(object sender, ASPxGridViewTableRowEventArgs e)
{ //绑定并显示
try
{
//首先,请确保你的代码严格只处理数据行。HtmlRowPrepared 也会为分组行、明细行等触发,
//在这些行上获取 KeyValue 通常是无效的
//ASPxDropDownEdit_xq listBox_xq ASPxButton_qr_ygkzxq
if(e.RowType!=GridViewRowType.Data)
{
return;
}
int rowsy = e.VisibleIndex;
int id = int.Parse(e.KeyValue.ToString());
//绑定并显示校区
ASPxDropDownEdit adde_xq = (ASPxDropDownEdit)ASPxGridView_ygkz.FindRowCellTemplateControl(rowsy, null, "ASPxDropDownEdit_xq");
ASPxListBox lbx_xq = (ASPxListBox)adde_xq.FindControl("listBox_xq");
// ASPxButton btn_xq = (ASPxButton)adde_xq.FindControl("ASPxButton_qr_ygkzxq");
//btn_xq.CommandArgument = e.KeyValue.ToString();// CommandArgument='<%# Eval("ID") %>'无数据源表,数据源表校区绑定lbx_xq,没有绑定aspxbutton,
//因此这里绑定字段,数据为null
//btn_xq单击事件,还是无法获取btn_xq.CommandArgument
admin_user gly = (admin_user)ViewState["dngly068"];
var cx_xq = from aa in sjklj.校区
where aa.dwid == gly.dwid
select aa;
lbx_xq.DataSource = cx_xq;
lbx_xq.TextField = "校区名称";
lbx_xq.ValueField = "校区名称";
lbx_xq.DataBind();
//显示选中项
var cx_xzxq = (from aa in sjklj.员工基础信息
where aa.ID == id
select aa.校区名称).FirstOrDefault();//多个校区用空格分割
if (cx_xzxq != null)
{
if (string.IsNullOrWhiteSpace(cx_xzxq.Trim()))
{
return;
}
string[] xqmc = cx_xzxq.Trim().Split(' ');//只有一个校区,则去索引为0的
foreach (string xq in xqmc)
{
lbx_xq.Items.FindByText(xq).Selected = true;
}
adde_xq.Text = cx_xzxq.Trim(); //把选中项显示在ASPxDropDownEdit_xq上
}
}
catch
{
}
}
protected void ASPxButton_qr_ygkzxq_Click(object sender, EventArgs e)
{
//listBox_xq ASPxDropDownEdit_xq ASPxGridView_ygkz
//选择多项并显示,取消listbox自动回传和选择变化事件,加入同级listbox的按钮,命令参数绑定主见和可视化索引
//(通过主键可以获取本行可视化索引),
//然后按钮点击事件找到aspxcomboxedit,再用aspxcomboxedit的发现控件找到listbox,获取选择项目,保存到数据库。
//CommandArgument='<%# Eval("ID") %>'
Control ctrl = sender as Control;
ASPxDropDownEdit adde_xq = null;
// 沿控件树向上查找,跳过 TemplateContainerBase
while (ctrl != null)
{
if (ctrl is ASPxDropDownEdit)
{
adde_xq = ctrl as ASPxDropDownEdit;
break;
}
ctrl = ctrl.Parent; // 用 Parent 比 NamingContainer 更直观
}
if (adde_xq == null) return;
ASPxButton btn = sender as ASPxButton;
if(btn!=null)
{
//测试
/*
this.ASPxLabel_tytsxx.Text = btn.CommandArgument;
this.ASPxPopupControl_tytsxx.ShowOnPageLoad = true;
return;
*/
// int id = int.Parse(btn.CommandArgument);//主键
// int rowsy = ASPxGridView_ygkz.FindVisibleIndexByKeyValue(id);//行visbleindex
GridViewDataItemTemplateContainer container = (GridViewDataItemTemplateContainer)adde_xq.NamingContainer;
ASPxListBox alb_xq = (ASPxListBox)adde_xq.FindControl("listBox_xq");
int id = int.Parse(container.KeyValue.ToString());
string xqlj = "";//校区,可以多个
/*只能从客户端获取,否则丢失数据,一个都没有选择
foreach (ListEditItem li in alb_xq.Items)
{
if(li.Selected)
{
xqlj += li.Text + " ";
}
}
*/
object value = ASPxHiddenField1.Get("SelectedValues");
string strValue = value?.ToString(); // 根据实际类型转换
xqlj = strValue.Trim();//选中的一个或多个校区
var cx_xq = (from aa in sjklj.员工基础信息
where aa.ID == id
select aa).FirstOrDefault();
if (cx_xq != null)
{
cx_xq.校区名称 = xqlj;
sjklj.SaveChanges();
}
ASPxButton_cxjzg_kz_Click(null, null);//刷新
//测试
/*
this.ASPxLabel_tytsxx.Text = xqlj;
this.ASPxPopupControl_tytsxx.ShowOnPageLoad = true;
return;
*/
}
}