如何解决DetailsView中编辑状态时级联下拉列表框新值与当前显示值(SelectedValue)相冲突的情况?
aspx代码:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CustomerManDetail.aspx.cs" Inherits="CustomerManDetail" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>客户代表资料</title>
</head>
<body>
<form id="form1" runat="server">
<div class="set" id="ClassMag">
<div class ="setmain">
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False"
DataKeyNames="dm" DataSourceID="SqlDataSourceM"
Width="763px" BorderColor="#43E273" BorderStyle="Solid">
<FieldHeaderStyle Width="100px" BackColor="#82DF82" Font-Names="黑体" Font-Size="15px" ForeColor="White" />
<RowStyle Height="24px" />
<Fields>
<asp:BoundField DataField="dm" HeaderText="代码" InsertVisible="False" ReadOnly="True"/>
<asp:TemplateField HeaderText="姓名">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("mc") %>'></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="请输入姓名!" Display="None"></asp:RequiredFieldValidator>
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
ShowMessageBox="True" ShowSummary="False" />
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("mc") %>'></asp:Label>
</ItemTemplate>
<ControlStyle Width="400px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="省级行政">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack ="true"
DataSourceID="SqlDataSource1" DataTextField="shortmc" DataValueField="dm"
SelectedValue='<%# Eval("parentdm") %>'>
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:manageConnectionString %>"
SelectCommand="SELECT [shortmc], [dm] FROM [customerparent]"></asp:SqlDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("parentshortmc") %>'></asp:Label>
</ItemTemplate>
<ControlStyle Width="407px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="市级行政">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList2" runat="server"
DataSourceID="SqlDataSource2" DataTextField="fullmc" DataValueField="dm" SelectedValue='<%# Eval("subdm") %>'>
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource2" runat="server"
ConnectionString="<%$ ConnectionStrings:manageConnectionString %>"
SelectCommand="SELECT [dm],[fullmc] FROM [CustomerSub] WHERE ([parentdm] = @parentdm) ">
<SelectParameters>
<asp:ControlParameter ControlID="DetailsView1$DropDownList1"
Name="parentdm" PropertyName="SelectedValue" Type="Int32"/>
</SelectParameters>
</asp:SqlDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("subfullmc") %>'></asp:Label>
</ItemTemplate>
<ControlStyle Width="407px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="职务">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList3" runat="server"
DataSourceID="SqlDataSource3" DataTextField="mc" DataValueField="dm" SelectedValue='<%# Eval("positiondm") %>'>
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource3" runat="server"
ConnectionString="<%$ ConnectionStrings:manageConnectionString %>"
SelectCommand="SELECT [mc], [dm] FROM [position]"></asp:SqlDataSource>
<asp:CustomValidator ID="CustomValidator3" runat="server"
ClientValidationFunction="DDListValidateA"
ControlToValidate="DropDownList3" Display="None" ErrorMessage="请选择职务!"></asp:CustomValidator>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("positionmc") %>'></asp:Label>
</ItemTemplate>
<ControlStyle Width="407px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="操作">
<EditItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"
CommandName="Update" onclientclick="if(!window.confirm('确认要保存所作修改吗?')) return false;alert('修改成功!');"
Text="保存"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"
CommandName="Cancel" Text="取消"></asp:LinkButton>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"
CommandName="Edit" Text="编辑"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"
CommandName="Delete"
onclientclick="if(!window.confirm('确认要删除吗?')) return false;alert('删除成功!')"
Text="删除"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Fields>
<EditRowStyle Height="24px" Font-Size="12px" Width="300px" />
<AlternatingRowStyle BackColor="#E0FCDA" />
</asp:DetailsView>
<asp:SqlDataSource ID="SqlDataSourceM" runat="server"
ConnectionString="<%$ ConnectionStrings:manageConnectionString %>">
<UpdateParameters>
<asp:Parameter Name ="mc" Type ="String" />
<asp:ControlParameter ControlID="DetailsView1$DropDownList1" Name="parentdm" PropertyName="SelectedValue" Type ="Int32" />
<asp:ControlParameter ControlID="DetailsView1$DropDownList2" Name="subdm" PropertyName="SelectedValue" Type ="Int32" />
<asp:ControlParameter ControlID="DetailsView1$DropDownList3" Name="positiondm" PropertyName="SelectedValue" Type ="Int32" />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name ="dm" Type ="Int32" />
</DeleteParameters>
</asp:SqlDataSource>
</div>
</div>
</form>
</body>
</html>
编辑状态时,市级下拉列表框显示是数据库取出的对应省级的数据,之所以出现错误,我分析是因为当省级发生变化时,通过启用AutoPostBack将新省级对应的市级数据取出并赋值给市级下拉列表,但市级的SelectedValue值还是原省级对应的数据,于是出现冲突。
如果去掉这句:SelectedValue='<%# Eval("positiondm") %>'就可以正常使用级联列表框功能,但在进入编辑状态时,市级下拉列表中就不是显示的原记录的对应数据。
另外,也尝试过在省级下拉列表框的SelectedIndexChanged事件中编写代码以改变SelectedValue,或者动态加载市级下拉列表框数据,都没有成功。
如何解决这种在原值基础上更新时的冲突,或者用其它方法实现?请高手指点,不胜感激!权限有限,暂时只能给25分,如能成功解决,一定追加给分!
补充:.NET技术 , ASP.NET