【问题标题】:Change background color of gridview row while processing处理时更改gridview行的背景颜色
【发布时间】:2014-06-11 12:12:09
【问题描述】:

我需要做的是在处理时突出显示每一行以显示处理进度,gridview 可能包含几乎一千行。下面是我写的代码,但它不起作用。 请有人帮助我。

asp:GridView ID="gdview1" runat="server" BackColor="White"
                BorderColor="#DEDFDE" BorderStyle="Solid" BorderWidth="1px" CellPadding="4"
                ForeColor="Black" GridLines="Vertical" Font-Names="Calibri"
                Font-Size="Small" AutoGenerateColumns="False"
                OnRowDataBound="gdview1_RowDataBound"
                OnSelectedIndexChanged="gdview1_SelectedIndexChanged">
                <AlternatingRowStyle BackColor="White" />
                <Columns>
                    <asp:TemplateField>
                        <HeaderTemplate>
                            <asp:CheckBox ID="chkBxHeader" OnCheckedChanged="chkSelect_CheckedChanged" AutoPostBack="true" runat="server" />
                        </HeaderTemplate>
                        <EditItemTemplate>
                            <asp:CheckBox ID="chkNUM" runat="server" />
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:CheckBox ID="chkNUM" runat="server" DataField="ColNUM" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Row#">
                        <ItemTemplate>
                            <%# Container.DataItemIndex + 1 %>
                        </ItemTemplate>
                    </asp:TemplateField>

                    <asp:BoundField DataField="ColNUM" HeaderText="Contract #" />
                    <asp:BoundField DataField="Col1" HeaderText="Suffix" />
                    <asp:BoundField DataField="Col2" HeaderText="First Name" />
                    <asp:BoundField DataField="Col3" HeaderText="Last Name" />
                    <asp:BoundField DataField="Col4" HeaderText="Street" />
                    <asp:BoundField DataField="Col5" HeaderText="City" />
                    <asp:BoundField DataField="Col6" HeaderText="Zip" />

                </Columns>
                <FooterStyle BackColor="#CCCC99" />
                <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
                <PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
                <RowStyle BackColor="#F7F7DE" />
                <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
                <SortedAscendingCellStyle BackColor="#FBFBF2" />
                <SortedAscendingHeaderStyle BackColor="#848384" />
                <SortedDescendingCellStyle BackColor="#EAEAD3" />
                <SortedDescendingHeaderStyle BackColor="#575357" />

            </asp:GridView>




 namespace WebApplication1
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {

            }

            protected void butChargeCreditCards_Click(object sender, EventArgs e)
            {

                DataTable tblContrts = (DataTable) Session["tblContrts"];

                foreach (GridViewRow row in gdview1.Rows)
                {

                    CheckBox chkbx = (CheckBox) row.FindControl("chkNUM");

                    if (chkbx != null && chkbx.Checked)
                    {

                        gdview1_SelectedIndexChanged(row,e);



                        string SS = chkbx.Text.ToString();



                        string strResults = method1;



                    }


                }

            }


            protected void gdview1_SelectedIndexChanged(object sender, EventArgs e)
            {

                foreach (GridViewRow row in gdview1.Rows)
                {
                    if (row.RowIndex == gdview1.SelectedIndex)
                    {
                        row.BackColor = ColorTranslator.FromHtml("#A1DCF2");
                    }
                    else
                    {
                        row.BackColor = ColorTranslator.FromHtml("#FFFFFF");
                    }
                }
            }

        }
    }

【问题讨论】:

  • 问题在于,因为它是 ASP.NET,所以每次想要突出显示下一行时都必须向客户端发送响应(这会非常低效)。考虑考虑使用 Ajax 等将异步响应发送回客户端。查看 ASP.NET 页面生命周期,了解 ASP.NET 如何处理请求msdn.microsoft.com/en-us/library/ms178472(v=vs.85).aspx
  • 为了清楚起见,您提供的代码在逻辑上是合理的,但 ASP.NET 不会更新客户端上的任何控件,直到它在服务器端完全完成并准备好返回,这将是在 butChargeCreditCards_Click() 完成执行之后。您可能会发现完成后在客户端上选择了最后一行,因为在方法完成之前将所选索引设置为它(foreach 循环的最后一次运行)
  • 为什么不使用进度条?像这样 [Using Modal Popup Extender][1] 或像这样:[Iframe][2] [1]: stackoverflow.com/questions/24059067/… [2]: stackoverflow.com/questions/24156899/…
  • 感谢大家的快速回复。我已经实现了一个等待 gif 图标并提出了一个进度条,但客户端(用户)仍然希望逐行跟踪进度。

标签: c# asp.net gridview


【解决方案1】:

您是否尝试过使用网格的“OnRowDataBound”或“OnRowCreated”事件并在后面的代码中编写颜色高亮?

像这样?
http://www.java2s.com/Code/ASP/ADO.net-Database/UsingtheRowCreatedEventtoprogrammaticallychangethestyle.htm

但也许您有问题,因为加载速度太快而无法真正注意到?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-29
    • 2018-09-23
    • 2013-06-28
    • 2013-02-11
    • 2020-03-16
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    相关资源
    最近更新 更多