当前位置:编程学习 > C#/ASP.NET >>

如何解决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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,