【问题标题】:How to update/insert the status (one column) in the GridView by selecting a value from DropDownList?如何通过从 DropDownList 中选择一个值来更新/插入 GridView 中的状态(一列)?
【发布时间】:2012-02-28 16:43:41
【问题描述】:

我的数据库中有两个表如下:

建议表:ID、Title、Description、StatusID...等

SuggestionsStatus 表:ID、状态

我正在使用 GridView 来显示建议,并在最后一列中放置了一个 DropDownList,用于选择每个建议的状态。现在,当我尝试通过从 DropDownList 中选择状态来更新已提交建议之一的状态时,该值已被选中但未插入到数据库中(这意味着我在 StatusID 列中仍有 NULL 值建议表),我不知道为什么。

我的 ASP.NET 代码:

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
                        AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="ID" 
                        width="950px" CssClass="mGrid"
                        AlternatingRowStyle-CssClass="alt" 
                        RowStyle-HorizontalAlign="Center" 
                        DataSourceID="SqlDataSource1" 
                        OnRowDataBound="GridView1_RowDataBound" >
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
            <HeaderStyle Font-Bold = "true" ForeColor="Black" Height="20px"/> 
            <Columns>
                <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
                    ReadOnly="True" SortExpression="ID" />
                <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
                <asp:BoundField DataField="Description" HeaderText="Description" 
                    SortExpression="Description" />
                <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
                <asp:BoundField DataField="Username" HeaderText="Username" 
                    SortExpression="Username" />
                <asp:BoundField DataField="DivisionShortcut" HeaderText="Division" 
                    SortExpression="DivisionShortcut" />
                <asp:TemplateField HeaderText="Status">
                    <ItemTemplate>
                        <asp:DropDownList ID="DropDownList" runat="server" DataSourceID="SqlDataSource2"
                                          Font-Bold="True" ForeColor="#006666" AppendDataBoundItems="false" 
                                          DataTextField="Status" DataValueField="ID" AutoPostBack="true" 
                                          OnDataBound="DropDownList_DataBound">
                        </asp:DropDownList>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
            SelectCommand="SELECT     dbo.SafetySuggestionsLog.ID, dbo.SafetySuggestionsLog.Title, dbo.SafetySuggestionsLog.Description, dbo.employee.Name, dbo.SafetySuggestionsLog.Username, 
                      dbo.Divisions.DivisionShortcut
FROM         dbo.employee INNER JOIN
                      dbo.SafetySuggestionsLog ON dbo.employee.Username = dbo.SafetySuggestionsLog.Username INNER JOIN
                      dbo.Divisions ON dbo.employee.DivisionCode = dbo.Divisions.SapCode"
                      FilterExpression="[DivisionShortcut] like '{0}%'">

                      <FilterParameters>
                        <asp:ControlParameter ControlID="ddlDivision" Name="DivisionShortcut" 
                                                 PropertyName="SelectedValue" Type="String" />
                    </FilterParameters>
        </asp:SqlDataSource>

        <%--For the DropDownList--%>
        <asp:SqlDataSource ID="SqlDataSource2" runat="server"
        ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
        SelectCommand="SELECT * FROM [SafetySuggestionsStatus]"></asp:SqlDataSource>

我的代码隐藏:

protected void DropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList ddl = (DropDownList)sender;
    int suggestionStatus = int.Parse(ddl.SelectedValue);
    //For inserting the status in the database
    string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=psspdbTest;Integrated Security=True";
    string updateCommand = "UPDATE SafetySuggestionsLog  SET [StatusID] = @StatusID";
    using (SqlConnection conn = new SqlConnection(connString))
    {
        conn.Open();
        using (SqlCommand cmd = new SqlCommand(updateCommand, conn))
        {
            cmd.Parameters.Clear();
            cmd.Parameters.AddWithValue("@StatusID", suggestionStatus);
            cmd.ExecuteNonQuery();
        }
        conn.Close();
    }
}

它可以工作,但它会更新所有提交建议的状态。

那么我该如何解决这个问题,以便能够更新数据库中 (GridView) 中已提交建议之一的状态?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    您需要更改更新语句以包含记录的 id,例如:

    UPDATE SafetySuggestionsLog  SET [StatusID] = @StatusID WHERE SafetySuggestionId = @SafetySuggestionId 
    

    要获取更新的 id,您需要执行类似这篇文章的操作来获取行索引,然后使用它来查找 id:get selected row index of dynamic dropdown list selection

    问候 安迪

    【讨论】:

    • 感谢您的帮助,但是那个帖子很难理解,请您提供代码sn-p吗?
    • 这个想法是,您将下拉下拉列表作为发件人并获取父母。然后,您继续获取父母的父母,直到您到达您需要的元素,我认为在您的情况下这将是一个 DataRow。获得数据行后,您就可以访问包含更新所需 ID 的 DataCell。我相信你很快就会让它工作,祝你好运
    猜你喜欢
    • 2019-12-22
    • 2012-04-29
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 2019-12-19
    • 2014-10-22
    • 2014-02-16
    • 1970-01-01
    相关资源
    最近更新 更多