【问题标题】:Drop down list and gridview color下拉列表和网格视图颜色
【发布时间】:2016-05-06 03:36:21
【问题描述】:

好的,本周早些时候我在根据条件突出显示 GridView 中的单元格方面得到了一些帮助。

现在,我想将下拉列表添加到列状态(完成或未完成)。我让它工作了,但我不知道如何在使用新用户输入更新字段后更改颜色。

我尝试使用以下代码来执行此操作,但我猜我需要调用 DDL 或模板?

关于如何实现这一点的任何想法?

我仍然没有运气。看起来当状态字段通过下拉列表更新时,它不会解释新数据(自动回发设置为 true。)基本上,它认为该值仍然是“null”。有什么想法吗?

<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataKeyNames="SID" DataSourceID="SqlDataSource2" OnDataBound="GridView2_SelectedIndexChanged" OnSelectedIndexChanged="GridView2_SelectedIndexChanged">
   <Columns>
        <asp:CommandField ShowEditButton="True" />
        <asp:BoundField DataField="SID" HeaderText="SID" InsertVisible="False" ReadOnly="True" SortExpression="SID" />
        <asp:BoundField DataField="Servers" HeaderText="Servers" SortExpression="Servers" />
        <asp:TemplateField HeaderText="Status" SortExpression="Status">
            <EditItemTemplate>
                <asp:DropDownList ID="DropDownList1" runat="server" SelectedValue='<%# Bind("Status") %>' OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
                    <asp:ListItem>done</asp:ListItem>
                    <asp:ListItem>not done</asp:ListItem>
                    <asp:ListItem></asp:ListItem>
                </asp:DropDownList>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Bind("Status") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

后面的代码:

protected void GridView2_SelectedIndexChanged(object sender, EventArgs e)
{
    foreach (GridViewRow row in GridView2.Rows)
    {
        if (row.Cells[3].Text == "done")
        {
            row.BackColor = System.Drawing.Color.LimeGreen;
        }
        else if (row.Cells[3].Text == "not done")
        {
            row.BackColor = System.Drawing.Color.Red;
        }
    }
}

【问题讨论】:

    标签: c# asp.net visual-studio gridview dropdown


    【解决方案1】:

    如果我对您的理解正确,您需要处理 DropDownList 的 SelectedIndexChanged 事件,而不是 GridView。然后,您将使用与已有的类似的逻辑,但根据更改的 DropDownList 查找 GridViewRow。

    确保您的 DropDownList 将处理 SelectedIndexChanged 事件。请记住,除非被告知,否则 DropDownLists 不会自动导致回发。

    <asp:DropDownList ID="DropDownList1" runat="server"
        SelectedValue='<%# Bind("Status") %>' 
        OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" 
        AutoPostBack="True">
    
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        DropDownList ddl = (DropDownList)sender;
        GridViewRow row = (GridViewRow)ddl.NamingContainer;
    
        if(ddl.SelectedItem.Text == "done")
        {
            row.BackColor = System.Drawing.Color.LimeGreen;
        }
        else if(ddl.SelectedItem.Text == "not done")
        {
            row.BackColor = System.Drawing.Color.Red;
        }
    }
    

    【讨论】:

    • 我添加了代码,但是当你去编辑 gridview 时它只会突出显示行颜色。我希望它突出显示该行以反映用户通过下拉列表更新记录后的更改。
    • 我不太明白你的意思。您想在用户更改 DropDownList 中的选择时突出显示该行吗?
    • 请注意,GridView 的布局方式是说 DropDownList 在 GridView 处于编辑模式时显示。
    • 那么gridview 有一个状态列。用户可以通过网格视图中状态列的下拉列表来编辑状态。更新后,应根据状态突出显示正在显示的记录。
    • 对,当他们这样做时,该行应该改变颜色,对吗?这就是我编写的代码的目的。其他时间颜色也应该改变吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    相关资源
    最近更新 更多