繁体   English   中英

asp.net c#DetailsView DropDownList无法更新

[英]asp.net c# DetailsView DropDownList fails to Update

我创建了一个DetailsView,它根据GridView中的选定项显示数据。 当DetailsView处于“编辑模式”下时,它将显示下拉列表,其中包含来自SQL数据绑定的数据。 数据显示在下拉列表中,没有问题,但是无法更新。 其他所有领域都成功。

数据通过OnDataBound绑定到下拉列表。 这个想法是用当前数据填充SelectedValue,然后填充可以更改的内容。 这没有问题。 它根本无法更新。

我相信这与将控件与“ an”参数同步有关,但如何操作却一无所获。

与该问题有关的前端代码:

<asp:DetailsView ID="userDetails" runat="server" 
            Height="50px" 
            Width="400px" 
            AutoGenerateRows="False" 
            CellPadding="4" 
            DataKeyNames="id" 
            DataSourceID="detailsSqlDataSource" 
            ForeColor="#333333" 
            GridLines="None"
            OnDataBound="userDetails_ItemEdit">
            <AlternatingRowStyle BackColor="White" />
            <CommandRowStyle BackColor="#D1DDF1" Font-Bold="True" />
            <EditRowStyle BackColor="#2461BF" />
            <FieldHeaderStyle BackColor="#DEE8F5" Font-Bold="True" width="125px"/>
            <Fields>
                <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" ReadOnly="True" SortExpression="id" />
                <asp:BoundField DataField="first_name" HeaderText="First Name" SortExpression="first_name" />
                <asp:BoundField DataField="last_name" HeaderText="Last Name" SortExpression="last_name" />
                <asp:BoundField DataField="user_name" HeaderText="User Name" SortExpression="user_name" />
                <asp:TemplateField HeaderText="T" SortExpression="t">
                    <EditItemTemplate>
                        <asp:DropDownList ID="tEditDD" runat="server" SelectedValue='<%# Bind("t") %>'>
                            <asp:ListItem Value="t1" Text="t1"></asp:ListItem>
                            <asp:ListItem Value="t2" Text="t2"></asp:ListItem>
                            <asp:ListItem Value="t3" Text="t3"></asp:ListItem>
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("t") %>'></asp:TextBox>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("t") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="P" SortExpression="p">
                    <EditItemTemplate>
                        <asp:DropDownList ID="pEditDD" runat="server" SelectedValue='<%# Bind("p") %>'>
                            <asp:ListItem Value="As" Text="As"></asp:ListItem>
                            <asp:ListItem Value="An" Text="An"></asp:ListItem>
                            <asp:ListItem Value="Su" Text="Su"></asp:ListItem>
                            <asp:ListItem Value="Ad" Text="Ad"></asp:ListItem>
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("p") %>'></asp:TextBox>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" Text='<%# Bind("p") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="An" SortExpression="an">
                    <EditItemTemplate>
                        <asp:DropDownList ID="anEditDD" runat="server">
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("an") %>'></asp:TextBox>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label3" runat="server" Text='<%# Bind("an") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Su" SortExpression="su">
                    <EditItemTemplate>
                        <asp:DropDownList ID="suEditDD" runat="server" >
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("su") %>'></asp:TextBox>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label4" runat="server" Text='<%# Bind("su") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="email" HeaderText="E-Mail" SortExpression="email" />
                <asp:TemplateField HeaderText="AL" SortExpression="al">
                    <EditItemTemplate>
                        <asp:DropDownList ID="alEditDD" runat="server" SelectedValue='<%# Bind("al") %>'>
                            <asp:ListItem Value="As" Text="As"></asp:ListItem>
                            <asp:ListItem Value="An" Text="An"></asp:ListItem>
                            <asp:ListItem Value="Su" Text="Su"></asp:ListItem>
                            <asp:ListItem Value="Ad" Text="Ad"></asp:ListItem>
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:DropDownList ID="alInsertDD" runat="server" SelectedValue='<%# Bind("al") %>'>
                            <asp:ListItem></asp:ListItem>
                            <asp:ListItem Value="As" Text="As"></asp:ListItem>
                            <asp:ListItem Value="An" Text="An"></asp:ListItem>
                            <asp:ListItem Value="Su" Text="Su"></asp:ListItem>
                            <asp:ListItem Value="Ad" Text="Ad"></asp:ListItem>
                        </asp:DropDownList>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label5" runat="server" Text='<%# Bind("al") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" />
            </Fields>
            <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
            <RowStyle BackColor="#EFF3FB" />
        </asp:DetailsView>
        <asp:SqlDataSource ID="detailsSqlDataSource" runat="server" 
            ConflictDetection="CompareAllValues" 
            ConnectionString="<%$ ConnectionStrings:CPConnectionString %>" 

            UpdateCommand="UPDATE [users] SET [first_name] = @first_name, [last_name] = @last_name, [user_name] = @user_name, [t] = @t, [p] = @p, [an] = @an, [su] = @su, [email] = @email, [al] = @al WHERE [id] = @original_id">

            <SelectParameters>
                <asp:ControlParameter ControlID="usersGrid" Name="id" PropertyName="SelectedValue" Type="Int32" />
            </SelectParameters>
            <UpdateParameters>
                <asp:Parameter Name="first_name" Type="String" />
                <asp:Parameter Name="last_name" Type="String" />
                <asp:Parameter Name="user_name" Type="String" />
                <asp:Parameter Name="t" Type="String" />
                <asp:Parameter Name="p" Type="String" />
                <asp:Parameter Name="an" Type="String" />
                <asp:Parameter Name="su" Type="String" />
                <asp:Parameter Name="email" Type="String" />
                <asp:Parameter Name="al" Type="String" />
                <asp:Parameter Name="original_id" Type="Int32" />
                <asp:Parameter Name="original_first_name" Type="String" />
                <asp:Parameter Name="original_last_name" Type="String" />
                <asp:Parameter Name="original_user_name" Type="String" />
                <asp:Parameter Name="original_t" Type="String" />
                <asp:Parameter Name="original_p" Type="String" />
                <asp:Parameter Name="original_an" Type="String" />
                <asp:Parameter Name="original_su" Type="String" />
                <asp:Parameter Name="original_email" Type="String" />
                <asp:Parameter Name="original_al" Type="String" />
            </UpdateParameters>
        </asp:SqlDataSource>

背后的代码:

protected void userDetails_ItemEdit(object sender, EventArgs e)
{
    if (userDetails.CurrentMode == DetailsViewMode.Edit)
    {
        AnDD();
    }
}

protected void AnDD()
{
    DropDownList anEditDD = userDetails.FindControl("anEditDD") as DropDownList;
    string userName = ((TextBox)userDetails.Rows[3].Cells[1].Controls[0]).Text;
    string conStr = System.Configuration.ConfigurationManager.ConnectionStrings["CPConnectionString"].ConnectionString; 
    SqlConnection con = new SqlConnection(conStr);
    con.Open();

    string currentAnSqlSelect = "SELECT an FROM users WHERE user_name='" + userName + "'";
    SqlDataReader currentReader;
    SqlCommand ccmd = new SqlCommand(currentAnSqlSelect, con);
    currentReader = ccmd.ExecuteReader();
    while (currentReader.Read())
    {
        ListItem currentList = new ListItem();
        currentList.Text = currentReader["an"].ToString();
        errorLBL.Text = currentReader["an"].ToString();
        anEditDD.Items.Add(currentList);
    }
    currentReader.Close();

    string anSqlSelect = "SELECT first_name, last_name FROM users WHERE position='An'";
    SqlDataReader anReader;

    SqlCommand cmd = new SqlCommand(anSqlSelect, con);
    anReader = cmd.ExecuteReader();
    while (anReader.Read())
    {
        ListItem anList = new ListItem();
        anList.Text = anReader["first_name"].ToString() + " " + anReader["last_name"].ToString();
        anEditDD.Items.Add(anList);
    }
    anReader.Close();
    con.Close();
    anEditDD.Items.Add("N/A");
    anEditDD.DataBind();
    anEditDD.SelectedIndex = 0;
}

您的更新命令似乎是详细信息视图的一部分,而不是任何ObjectDataSource的一部分。 您可以确认上面的标记正确吗?

编辑

UpdateParameters组中,您没有从控件中获取值。 尝试执行以下操作:

<UpdateParameters>
    <asp:Parameter />
    ...snip
    <asp:ControlParameter Name="an" ControlID="idOfWhateverControlHasTheUserSetValue" Type="String" />
    ...snip
</UpdateParameters>

我听取了您的建议,并对使用ControlParameter进行了一些研究。

该修复程序在“更新参数”中添加了以下内容,并删除了“ an”的自动填充参数。 感谢您的帮助,尼克。

<asp:ControlParameter Name="an" ControlID="userDetails$anEditDD" PropertyName="SelectedValue" Type="String" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM