This is a migrated thread and some comments may be shown as answers.

change radgridview row color programmatically

3 Answers 424 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Sonia
Top achievements
Rank 1
Sonia asked on 11 Aug 2011, 09:52 PM
This is my first time using telerik controls. I am using gridview with grouping enabled.I am changing gridview row color programmatically but after grouping , if I expand or collapse groups it changes the bgcolor to default.eher is my code:-
<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/ITIMaster.Master" CodeBehind="EmailList.aspx.vb" Inherits="EmailAlertsMonitor.EmailList" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<asp:HiddenField ID="hdAlertState" runat ="server" />
    <telerik:RadGrid ID="gvEmailList" runat="server" 
        AllowSorting="True" CellSpacing="0" DataSourceID="SqlDataSource1" 
        GridLines="None" ShowGroupPanel="True" Skin="Outlook" >
        <ClientSettings AllowDragToGroup="True">
            <Selecting AllowRowSelect="True" />
        </ClientSettings>
          
<MasterTableView AutoGenerateColumns="False" DataKeyNames="Alert_ID" 
            DataSourceID="SqlDataSource1">
         <GroupByExpressions >
            <telerik:GridGroupByExpression >
               <SelectFields >
                     <telerik:GridGroupByField FieldAlias ="Email_Subject" FieldName ="Email_Subject" />
               </SelectFields>
               <GroupByFields >
                     <telerik:GridGroupByField FieldName ="Email_Subject" HeaderText ="Subject" />
               </GroupByFields>
            </telerik:GridGroupByExpression>
         </GroupByExpressions>   
<CommandItemSettings ExportToPdfText="Export to PDF"></CommandItemSettings>
  
<RowIndicatorColumn FilterControlAltText="Filter RowIndicator column">
<HeaderStyle Width="20px"></HeaderStyle>
</RowIndicatorColumn>
  
<ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column">
<HeaderStyle Width="20px"></HeaderStyle>
</ExpandCollapseColumn>
   
    <Columns>
        <telerik:GridBoundColumn DataField="Alert_State" 
            FilterControlAltText="Filter Alert_State column" HeaderText="Alert_State" 
            SortExpression="Alert_State" UniqueName="Alert_State" ItemStyle-Width ="50px">
<ItemStyle Width="50px"></ItemStyle>
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn DataField="Email_Subject" 
            FilterControlAltText="Filter Email_Subject column" HeaderText="Email_Subject" 
            SortExpression="Email_Subject" UniqueName="Email_Subject" ItemStyle-Width ="200px">
<ItemStyle Width="200px"></ItemStyle>
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn DataField="Email_Sender" 
            FilterControlAltText="Filter Email_Sender column" HeaderText="Email_Sender" 
            SortExpression="Email_Sender" UniqueName="Email_Sender" ItemStyle-Width ="100px">
<ItemStyle Width="100px"></ItemStyle>
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn DataField="Email_DateReceived" 
            DataType="System.DateTime" 
            FilterControlAltText="Filter Email_DateReceived column" 
            HeaderText="Email_DateReceived" SortExpression="Email_DateReceived" 
            UniqueName="Email_DateReceived" ItemStyle-Width ="80px">
<ItemStyle Width="80px"></ItemStyle>
        </telerik:GridBoundColumn>
         
       <telerik:GridBoundColumn DataField="Alert_Level_Descr" 
            FilterControlAltText="Filter Alert_Level_Descr column" 
            HeaderText="Alert_Level_Descr" SortExpression="Alert_Level_Descr" 
            UniqueName="Alert_Level_Descr" ItemStyle-Width ="100px">
<ItemStyle Width="100px"></ItemStyle>
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn DataField="Alert_Source" 
            FilterControlAltText="Filter Alert_Source column" HeaderText="Alert_Source" 
            SortExpression="Alert_Source" UniqueName="Alert_Source" ItemStyle-Width ="100px">
<ItemStyle Width="100px"></ItemStyle>
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn DataField="Alert_Server" 
            FilterControlAltText="Filter Alert_Server column" HeaderText="Alert_Server" 
            SortExpression="Alert_Server" UniqueName="Alert_Server">
        </telerik:GridBoundColumn>
        <telerik:GridTemplateColumn HeaderText ="" >
                <ItemTemplate >
                       <asp:HiddenField ID="hdColorCode" runat ="server" Value ='<%#EVAL("Alert_Level_Color_Code") %>' />
                </ItemTemplate>
        </telerik:GridTemplateColumn>
    </Columns>
  
<EditFormSettings>
<EditColumn FilterControlAltText="Filter EditCommandColumn column"></EditColumn>
</EditFormSettings>
</MasterTableView>
  
<FilterMenu EnableImageSprites="False"></FilterMenu>
  
<HeaderContextMenu CssClass="GridContextMenu GridContextMenu_Default"></HeaderContextMenu>
    </telerik:RadGrid>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" 
        SelectCommand="SELECT Alert_Emails.Alert_ID, Alert_Emails.Email_ToAddresses, Alert_Emails.Email_Sender, Alert_Emails.Email_DateReceived, Alert_Emails.Email_Subject, Alert_Emails.EMail_Body, Alert_Emails.Alert_Level, Alert_Emails.Alert_Source, Alert_Emails.Alert_Server, Alert_Emails.Alert_State, Alert_Level.Alert_Level AS Alert_Level_Descr, Alert_Level.Alert_Level_Color_Code FROM Alert_Emails INNER JOIN Alert_Level ON Alert_Emails.Alert_Level = Alert_Level.Alert_Level_ID WHERE (Alert_Emails.Alert_State = @alertState) ORDER BY Alert_Emails.Alert_Level, Alert_Emails.Email_DateReceived DESC">
        <SelectParameters>
            <asp:Parameter Name="alertState" />
        </SelectParameters>
    </asp:SqlDataSource>
</asp:Content>
Imports System.Drawing
Imports System.Data
Imports System.Data.SqlClient
Public Class EmailList
    Inherits System.Web.UI.Page
    Dim alertState As String
  
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Page.IsPostBack = False Then
            alertState = Request.QueryString("State")
            Me.hdAlertState.Value = alertState
            LoadGrid()
        End If
    End Sub
    Private Sub LoadGrid()
        SqlDataSource1.SelectParameters("alertState").DefaultValue = hdAlertState.Value
        SqlDataSource1.Select(DataSourceSelectArguments.Empty)
        gvEmailList.DataBind()
        
    End Sub
  
    Private Sub gvEmailList_ItemDataBound(sender As Object, e As Telerik.Web.UI.GridItemEventArgs) Handles gvEmailList.ItemDataBound
        If e.Item.ItemType = Telerik.Web.UI.GridItemType.Item Or e.Item.ItemType = Telerik.Web.UI.GridItemType.AlternatingItem Then
            Dim alertColorCode As String = DirectCast(e.Item.FindControl("hdColorCode"), HiddenField).Value
            e.Item.BackColor = Color.FromName(alertColorCode)
        End If
    End Sub
  
     
End Class

3 Answers, 1 is accepted

Sort by
0
Princy
Top achievements
Rank 2
answered on 12 Aug 2011, 06:13 AM
Hello Sonia,

From your code I can see that you are binding the RadGrid from PageLoad event and also setting DataSouceId for RadGrid. If you are using any advanced features in RadGrid like grouping, it is better to populate RadGrid either using Advanced DataBinding (using NeedDataSource event) or using declarative Data Binding.

Also the code is working fine at my end with Telerik Version 2011, 1, 519, 35 .Sample code is given below.

ASPX:
<asp:HiddenField ID="hdAlertState" runat="server" Value="Red" />
      <telerik:RadGrid ID="gvEmailList" runat="server" AllowSorting="True"
          GridLines="None" ShowGroupPanel="True" Skin="Outlook"
          onitemdatabound="gvEmailList_ItemDataBound"
          onneeddatasource="gvEmailList_NeedDataSource">
           <MasterTableView AutoGenerateColumns="False" DataKeyNames="EmployeeID">
              <GroupByExpressions>
                  <telerik:GridGroupByExpression>
                      <SelectFields>
                          <telerik:GridGroupByField FieldAlias="FirstName" FieldName="FirstName" />
                      </SelectFields>
                      <GroupByFields>
                          <telerik:GridGroupByField FieldName="FirstName" HeaderText="Subject" />
                      </GroupByFields>
                  </telerik:GridGroupByExpression>
              </GroupByExpressions>
              <Columns>
                   <telerik:GridBoundColumn DataField="EmployeeID" DataType="System.Int32" HeaderText="Id"
                      ReadOnly="True" SortExpression="EmployeeID" UniqueName="EmployeeID">
                  </telerik:GridBoundColumn>
                  <telerik:GridBoundColumn DataField="FirstName" FilterControlAltText="Filter Name column"
                      HeaderText="Name" SortExpression="FirstName" UniqueName="FirstName">
                  </telerik:GridBoundColumn>
              </Columns>
          </MasterTableView>
    </telerik:RadGrid>

VB.Net:
Protected Sub gvEmailList_ItemDataBound(sender As Object, e As GridItemEventArgs)
    Dim hf As HiddenField = DirectCast(Me.FindControl("hdAlertState"), HiddenField)
    Dim va As String = hf.Value
    e.Item.BackColor = System.Drawing.Color.FromName(va)
End Sub
Protected Sub gvEmailList_NeedDataSource(sender As Object, e As GridNeedDataSourceEventArgs)
    bindgrid()
End Sub
 
Public Sub bindgrid()
    'populate DataSet
    gvEmailList.DataSource = DataSet
End Sub

Hope this helps,
Princy.
0
Sonia
Top achievements
Rank 1
answered on 12 Aug 2011, 01:51 PM
Princy , Thanks for your reply. But the problem is still there I am using your code. It displays row colors first time but when I expand or collapse group the row color changes to default.Please see pictures , the first one is when page loads for the first time and second one is after collapsing and then expanding the group.
0
Tsvetina
Telerik team
answered on 17 Aug 2011, 10:10 AM
Hi Sonia,

I still think that the problem is with your databinding logic. I saw from your support ticket on the same topic that you are using NeedDataSource incorrectly and you are still calling DataBind() from it. I am attaching the sample project here as well if anyone else is interested. It demonstrates that with declarative databinding, the rows get colored as expected without changing the ItemDataBound code at all. When you need to rebind the grid when using a datasource control for populating it, use Rebind() instead of DataBind().

Best wishes,
Tsvetina
the Telerik team

Browse the vast support resources we have to jump start your development with RadControls for ASP.NET AJAX. See how to integrate our AJAX controls seamlessly in SharePoint 2007/2010 visiting our common SharePoint portal.

Tags
Grid
Asked by
Sonia
Top achievements
Rank 1
Answers by
Princy
Top achievements
Rank 2
Sonia
Top achievements
Rank 1
Tsvetina
Telerik team
Share this question
or