Steve Newbery
Top achievements
Rank 1
Steve Newbery
asked on 21 Apr 2008, 11:33 AM
I'd like to have the SQL Server column description property as a tooltip in my radGrid. I can easily enough get the descriptions by querying sysproperties (or sys.columns in SQL Server 2005), but I'm not sure about the next step.
I'm guessing I would populate a dataset with the descriptions in the form's Load event, and then in maybe the ItemCreated event of each column I would set the tooltip.
If anyone has an example of doing this, or something similar, I'd be eternally grateful to see it!
One thing, I don't see a tooltip property in radGrid per column - do I have to convert each column to a template and use the title property?
I'm guessing I would populate a dataset with the descriptions in the form's Load event, and then in maybe the ItemCreated event of each column I would set the tooltip.
If anyone has an example of doing this, or something similar, I'd be eternally grateful to see it!
One thing, I don't see a tooltip property in radGrid per column - do I have to convert each column to a template and use the title property?
14 Answers, 1 is accepted
0
Hi Steve,
You can set the text for each cell in a given column, you can use code like the following:
.cs
Where "CategoryID" is the unique name of a column.
I hope this information helps.
All the best,
Yavor
the Telerik team
Instantly find answers to your questions at the new Telerik Support Center
You can set the text for each cell in a given column, you can use code like the following:
.cs
protected void RadGrid1_PreRender(object sender, EventArgs e) |
{ |
foreach (GridDataItem dataItem in RadGrid1.MasterTableView.Items) |
{ |
dataItem["CategoryID"].ToolTip = dataItem["CategoryID"].Text; |
} |
} |
Where "CategoryID" is the unique name of a column.
I hope this information helps.
All the best,
Yavor
the Telerik team
Instantly find answers to your questions at the new Telerik Support Center
0
Steve Newbery
Top achievements
Rank 1
answered on 24 Apr 2008, 08:59 PM
Thanks for the reply Yavor.
This solution would be for cells of the data rows in the rad Grid, is that correct?
Is it possible to do this only for the headings of each column? I fear that tooltips in each cell might get annoying for the users.
This solution would be for cells of the data rows in the rad Grid, is that correct?
Is it possible to do this only for the headings of each column? I fear that tooltips in each cell might get annoying for the users.
0
Shinu
Top achievements
Rank 2
answered on 25 Apr 2008, 04:02 AM
Hi Steve,
I hope the following help article will help you.
Adding tooltips for grid items
Thanks
Shinu.
I hope the following help article will help you.
Adding tooltips for grid items
Thanks
Shinu.
0
Steve Newbery
Top achievements
Rank 1
answered on 25 Apr 2008, 07:32 AM
Shinu that's it - yes!
Many thanks.
Many thanks.
0
Steve Newbery
Top achievements
Rank 1
answered on 28 Apr 2008, 08:21 AM
One thing I can't get to work, is to check that a heading link exists, using FindControl.
I'm setting the tooltips by reading the SQL Server description property for each column. This works fine with the code below:
But, I want to be sure the column exists in the grid. So I adapt the code to do a FindControl before setting the tooltip:
But the problem is that btn is always nothing, in other words the FindControl never finds the heading link.
Can you help please?
I'm setting the tooltips by reading the SQL Server description property for each column. This works fine with the code below:
' Set tooltips for the header cells |
If (TypeOf e.Item Is GridHeaderItem) Then |
Dim headerItem As GridHeaderItem = CType(e.Item, GridHeaderItem) |
' Get the column descriptions |
Dim Reader As SqlDataReader = SqlDataSource2.Select(DataSourceSelectArguments.Empty) |
While Reader.Read() |
If Not (Reader("Description") Is DBNull.Value) Then |
CType(headerItem(Reader("ColumnName")).Controls(0), LinkButton).ToolTip = Reader("Description") |
End If |
End While |
End If |
But, I want to be sure the column exists in the grid. So I adapt the code to do a FindControl before setting the tooltip:
' Set tooltips for the header cells |
If (TypeOf e.Item Is GridHeaderItem) Then |
Dim headerItem As GridHeaderItem = CType(e.Item, GridHeaderItem) |
' Get the column descriptions |
Dim btn As LinkButton |
Dim Reader As SqlDataReader = SqlDataSource2.Select(DataSourceSelectArguments.Empty) |
While Reader.Read() |
btn = DirectCast(headerItem.FindControl(Reader("ColumnName")), LinkButton) |
' This doesn't work for some reason |
If Not (btn Is Nothing) Then |
If Not (Reader("Description") Is DBNull.Value) Then |
CType(headerItem(Reader("ColumnName")).Controls(0), LinkButton).ToolTip = Reader("Description") |
End If |
End If |
End While |
End If |
But the problem is that btn is always nothing, in other words the FindControl never finds the heading link.
Can you help please?
0
Shinu
Top achievements
Rank 2
answered on 28 Apr 2008, 12:24 PM
Hi,
You need to find the LinkButton in the grid using the Controls collection and not FindControl method
You need to find the LinkButton in the grid using the Controls collection and not FindControl method
if
(e.Item is GridHeaderItem)
{
GridHeaderItem headerItem=(GridHeaderItem)e.Item;
LinkButton btn = (LinkButton)headerItem["ColumnUniqueName"].Controls[0];
}
Thanks,
Shinu
0
Steve Newbery
Top achievements
Rank 1
answered on 28 Apr 2008, 02:00 PM
Shinu, thanks for the reply, but I think you misunderstood the question. I can already refer to the heading LinkButton ok and set the tooltip - see the first section of my code.
But my problem is how to check that the LinkButton actually exists, before attempting to set the tooltop. My second section of code tries unsuccessfully to do this.
But my problem is how to check that the LinkButton actually exists, before attempting to set the tooltop. My second section of code tries unsuccessfully to do this.
0
Steve Newbery
Top achievements
Rank 1
answered on 29 Apr 2008, 07:52 AM
Can someone help me here? I'd appreciate it.
0
Hi Steve,
Once you get a reference to the header item, check if
the Telerik team
Instantly find answers to your questions at the new Telerik Support Center
Once you get a reference to the header item, check if
header.Controls.Count
is more than 0. If that is the case, you can iterate through the controls, and check which one is the LinkButton.
This will give you a safe approach to referencing the control, and setting the tooltip.
I hope this information helps.
Sincerely yours,
the Telerik team
Instantly find answers to your questions at the new Telerik Support Center
0
Steve Newbery
Top achievements
Rank 1
answered on 29 Apr 2008, 11:56 AM
Yavor, thanks. So now my code is like below - in fact an adaptation of the help file code, and it works perfectly:
This means that we can set the Description property for each column in SQL Server, and that description is immediately displayed as a tooltip in the grid.
Thanks for your help!
Protected Sub RadGrid1_ItemCreated(ByVal sender As Object, ByVal e As GridItemEventArgs) |
' Set tooltips for the header cells |
If (TypeOf e.Item Is GridHeaderItem) Then |
Dim headerItem As GridHeaderItem = CType(e.Item, GridHeaderItem) |
' Get the column descriptions from SQL Server |
Dim Reader As SqlDataReader = SqlDataSource2.Select(DataSourceSelectArguments.Empty) |
While Reader.Read() |
'look for the column - if we find it we'll set the tooltip |
For Each column As GridColumn In RadGrid1.MasterTableView.RenderColumns |
If (TypeOf column Is GridBoundColumn) Then |
'if this is the column we want, and there is some tooltip text |
If column.UniqueName = Reader("ColumnName") And (Not (Reader("Description") Is DBNull.Value)) Then |
'if the sorting feature of the grid is enabled |
CType(headerItem(column.UniqueName).Controls(0), LinkButton).ToolTip = Reader("Description") |
'if the sorting feature is disabled for this column or the entire grid |
headerItem(column.UniqueName).ToolTip = Reader("Description") |
End If |
End If |
Next |
End While |
End If |
This means that we can set the Description property for each column in SQL Server, and that description is immediately displayed as a tooltip in the grid.
Thanks for your help!
0
Hello Steve,
I hope the application is functioning as per your requirements now.
You can also consider moving this code in the ItemDataBound event handler, or get a reference to the header in the PreRender event handler.
Best wishes,
Yavor
the Telerik team
Instantly find answers to your questions at the new Telerik Support Center
I hope the application is functioning as per your requirements now.
You can also consider moving this code in the ItemDataBound event handler, or get a reference to the header in the PreRender event handler.
Best wishes,
Yavor
the Telerik team
Instantly find answers to your questions at the new Telerik Support Center
0
Steve Newbery
Top achievements
Rank 1
answered on 30 Apr 2008, 08:32 AM
Yes it's working very well now, thanks.
Would there be any particular reason or advantage to using the ItemDataBound or the PreRender events?
Would there be any particular reason or advantage to using the ItemDataBound or the PreRender events?
0
Hi Steve,
It depends on which stage you want to handle the logic. Also, the ItemDataBound is called for each item, whereas PreRender is called only once per lifecycle. in the ItemCreated no data may be available for the items (the data is fetched later on when the itemDataBound event handler is called. The ItemDataBound event handler is not called on each page cycle, since the items may not be bound each time, whereas PreRender is called on each page cycle. Depending on your implementation, it may be appropriate to put the code in different handlers - i added the information merely for the sake of completeness.
Sincerely yours,
Yavor
the Telerik team
Instantly find answers to your questions at the new Telerik Support Center
It depends on which stage you want to handle the logic. Also, the ItemDataBound is called for each item, whereas PreRender is called only once per lifecycle. in the ItemCreated no data may be available for the items (the data is fetched later on when the itemDataBound event handler is called. The ItemDataBound event handler is not called on each page cycle, since the items may not be bound each time, whereas PreRender is called on each page cycle. Depending on your implementation, it may be appropriate to put the code in different handlers - i added the information merely for the sake of completeness.
Sincerely yours,
Yavor
the Telerik team
Instantly find answers to your questions at the new Telerik Support Center
0
Steve Newbery
Top achievements
Rank 1
answered on 02 May 2008, 02:07 PM
Yavor - many thanks for the interesting and useful answer.