Philip Senechal
Top achievements
Rank 1
Philip Senechal
asked on 17 Jul 2010, 12:01 AM
I have an interesting scenario here that I could use some assistance with.
I have a RadGrid that is bound to the values from one database. One of the columns is an Employee ID. I actually display the Employee Name in the column, but I have to do a lookup to a completely different database to get the Employee Name. This works fine...I just do it in the ItemDataBound event using the Employee ID as DataKeyValue.
My problem comes when I turn this column into a filterable column. The dropdown used for filtering brings back the Employee ID and Employee Name from the outside database and the filtering process works fine. What happens after the column is filtered though is that the filter dropdown displays the Employee ID instead of the Employee Name. This is because the RadComboBox has its Text property set to <%# (Container as GridItem).OwnerTableView.GetColumn("ReqEmpID").CurrentFilterValue %> which of course is the Employee ID that I just filtered on.
What I need to do is after the grid is filtered, I need the dropdown to display the filter text, not the value. Or I need a way to put the Employee Name in that text property after the grid is filtered.
Can you maybe point me in the right direction on how to do that? Thanks!
I have a RadGrid that is bound to the values from one database. One of the columns is an Employee ID. I actually display the Employee Name in the column, but I have to do a lookup to a completely different database to get the Employee Name. This works fine...I just do it in the ItemDataBound event using the Employee ID as DataKeyValue.
My problem comes when I turn this column into a filterable column. The dropdown used for filtering brings back the Employee ID and Employee Name from the outside database and the filtering process works fine. What happens after the column is filtered though is that the filter dropdown displays the Employee ID instead of the Employee Name. This is because the RadComboBox has its Text property set to <%# (Container as GridItem).OwnerTableView.GetColumn("ReqEmpID").CurrentFilterValue %> which of course is the Employee ID that I just filtered on.
What I need to do is after the grid is filtered, I need the dropdown to display the filter text, not the value. Or I need a way to put the Employee Name in that text property after the grid is filtered.
Can you maybe point me in the right direction on how to do that? Thanks!
6 Answers, 1 is accepted
0
Hello Philip,
I recommend that you set the SelectedValue of the RadComboBox to
Please give this suggestion a try and let me know how it goes.
Kind regards,
Mira
the Telerik team
I recommend that you set the SelectedValue of the RadComboBox to
<%# (Container
as
GridItem).OwnerTableView.GetColumn(
"ReqEmpID"
).CurrentFilterValue %>
Please give this suggestion a try and let me know how it goes.
Kind regards,
Mira
the Telerik team
Do you want to have your say when we set our development plans?
Do you want to know when a feature you care about is added or when a bug fixed?
Explore the
Telerik Public Issue Tracking
system and vote to affect the priority of the items
0
Philip Senechal
Top achievements
Rank 1
answered on 21 Jul 2010, 05:01 PM
Hi Mira,
Thanks for the suggestion. This would normally work on the pre-populated drop-down filter controls, however, the one I'm working with is a load-on-demand drop down, so those values aren't pre-populated in the drop-down.
Perhaps going along those lines, is there a way I could add that particular selected value/text as a drop-down item when the filter is applied? Perhaps somewhere in the JavaScript that does the filtering? Or is there an event somewhere in the filtering timeline that I can use?
Much appreciated for the assistance.
Thanks for the suggestion. This would normally work on the pre-populated drop-down filter controls, however, the one I'm working with is a load-on-demand drop down, so those values aren't pre-populated in the drop-down.
Perhaps going along those lines, is there a way I could add that particular selected value/text as a drop-down item when the filter is applied? Perhaps somewhere in the JavaScript that does the filtering? Or is there an event somewhere in the filtering timeline that I can use?
Much appreciated for the assistance.
0
Philip Senechal
Top achievements
Rank 1
answered on 21 Jul 2010, 05:51 PM
Thought I would share some code with you if it helps at all to see what I'm doing.
Here is the .aspx page
here is the code that loads the grid...
which calls this...
here is the code for the load-on-demand drop-down...
which calls this...
Here is the .aspx page
<
telerik:GridTemplateColumn
HeaderText
=
"Requester"
DataField
=
"ReqEmpID"
UniqueName
=
"ReqEmpID"
>
<
HeaderStyle
Wrap
=
"false"
/>
<
ItemStyle
Wrap
=
"false"
/>
<
ItemTemplate
>
<
asp:Label
ID
=
"lbl_ReqEmpNm"
Text
=
""
runat
=
"server"
/><
br
/>
<
asp:Label
ID
=
"lbl_DeptNm"
Text
=
""
runat
=
"server"
/>
</
ItemTemplate
>
<
FilterTemplate
>
<
telerik:RadComboBox
ID
=
"dd_requester_filter"
Skin
=
"Office2007"
Width
=
"120px"
Font-Size
=
"11px"
Filter
=
"Contains"
AppendDataBoundItems
=
"true"
ShowMoreResultsBox
=
"true"
EnableLoadOnDemand
=
"true"
EnableVirtualScrolling
=
"true"
Text='<%# (Container as GridItem).OwnerTableView.GetColumn("ReqEmpID").CurrentFilterValue %>'
OnItemsRequested="dd_requester_filter_ItemsRequested" OnClientSelectedIndexChanged="RequesterIndexChanged"
runat="server">
<
Items
>
<
telerik:RadComboBoxItem
Text
=
"All"
/>
</
Items
>
</
telerik:RadComboBox
>
<
telerik:RadScriptBlock
ID
=
"RadScriptBlock2"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function RequesterIndexChanged(sender, args) {
var tableView=$find("<%# (Container as GridItem).OwnerTableView.ClientID %>");
tableView.filter("ReqEmpID", args.get_item().get_value(), "EqualTo");
}
</
script
>
</
telerik:RadScriptBlock
>
</
FilterTemplate
>
</
telerik:GridTemplateColumn
>
here is the code that loads the grid...
protected
void
RadGrid1_NeedDataSource(
object
source, GridNeedDataSourceEventArgs e)
{
if
(!e.IsFromDetailTable)
{
RadGrid1.DataSource = DataAccess.GetRequests(queueFilter, typeFilter);
}
}
which calls this...
public
static
IQueryable GetRequests(
string
queue,
string
type)
{
Requests.RequestsDataContext db =
new
Requests.RequestsDataContext();
var query = from requests
in
db.tRequests
orderby requests.DueDt, requests.ReqID
select
new
{ requests.ReqID, requests.tRequestType.ReqNm, requests.ReqDt, requests.ReqEmpID, requests.ReqTtl, requests.DueDt, requests.AnlysEmpID, requests.tStatus.StatNm, requests.tPriority.PrtyNm, Age = (requests.ReqTyp == 10 ? (requests.ReqStat == 4 || requests.ReqStat == 5 ? SqlMethods.DateDiffDay(requests.ReqDt, requests.CmplDt) - ((SqlMethods.DateDiffDay(requests.ReqDt, requests.CmplDt) / 7) * 2) - (requests.ReqDt.Value.DayOfWeek.ToString() ==
"Friday"
&& SqlMethods.DateDiffDay(requests.ReqDt, requests.CmplDt) % 7 >= 3 ? 2 : (requests.ReqDt.Value.DayOfWeek.ToString()) ==
"Thursday"
&& SqlMethods.DateDiffDay(requests.ReqDt, requests.CmplDt) % 7 >= 4 ? 2 : (requests.ReqDt.Value.DayOfWeek.ToString()) ==
"Wednesday"
&& SqlMethods.DateDiffDay(requests.ReqDt, requests.CmplDt) % 7 >= 5 ? 2 : (requests.ReqDt.Value.DayOfWeek.ToString()) ==
"Tuesday"
&& SqlMethods.DateDiffDay(requests.ReqDt, requests.CmplDt) % 7 >= 6 ? 2 : 0) : SqlMethods.DateDiffDay(requests.ReqDt, DateTime.Now) - ((SqlMethods.DateDiffDay(requests.ReqDt, DateTime.Now) / 7) * 2) - ((requests.ReqDt.Value.DayOfWeek.ToString()) ==
"Friday"
&& SqlMethods.DateDiffDay(requests.ReqDt, DateTime.Now) % 7 >= 3 ? 2 : (requests.ReqDt.Value.DayOfWeek.ToString()) ==
"Thursday"
&& SqlMethods.DateDiffDay(requests.ReqDt, DateTime.Now) % 7 >= 4 ? 2 : (requests.ReqDt.Value.DayOfWeek.ToString()) ==
"Wednesday"
&& SqlMethods.DateDiffDay(requests.ReqDt, DateTime.Now) % 7 >= 5 ? 2 : (requests.ReqDt.Value.DayOfWeek.ToString()) ==
"Tuesday"
&& SqlMethods.DateDiffDay(requests.ReqDt, DateTime.Now) % 7 >= 6 ? 2 : 0)) : ((requests.ReqStat == 4 || requests.ReqStat == 5) && requests.AssnDt ==
null
? SqlMethods.DateDiffDay(requests.ReqDt, requests.CmplDt) : (requests.ReqStat == 4 || requests.ReqStat == 5) && requests.AssnDt !=
null
? SqlMethods.DateDiffDay(requests.AssnDt, requests.CmplDt) : requests.ReqStat != 4 && requests.ReqStat != 5 && requests.AssnDt ==
null
? SqlMethods.DateDiffDay(requests.ReqDt, DateTime.Now) : SqlMethods.DateDiffDay(requests.AssnDt, DateTime.Now))), Tasks = requests.tTasks.Count(), MinTaskDueDate = (from tasks
in
requests.tTasks where tasks.TaskStat != 4 && tasks.TaskStat != 5 select tasks.TaskDueDt).Min() };
return
query;
}
here is the code for the load-on-demand drop-down...
protected
void
dd_requester_filter_ItemsRequested(
object
source, RadComboBoxItemsRequestedEventArgs e)
{
RadComboBox combo = (RadComboBox)source;
string
requesterCheck = e.Text;
DataTable table = DataAccess.GetEmployeesFilter(requesterCheck);
int
itemsPerRequest = 10;
int
itemOffset = e.NumberOfItems;
int
endOffset = Math.Min(itemOffset + itemsPerRequest, table.Rows.Count);
e.EndOfItems = endOffset == table.Rows.Count;
for
(
int
i = itemOffset; i < endOffset; i++)
{
combo.Items.Add(
new
RadComboBoxItem(table.Rows[i][
"EmpNm"
].ToString(), table.Rows[i][
"EmpID"
].ToString()));
}
e.Message = Functions.dd_StatusMessage(endOffset, table.Rows.Count);
}
which calls this...
public
static
DataTable GetEmployeesFilter(
string
EmpNm)
{
DataTable table = SqlGetDataTable(
"SELECT EmpID, EmpFNm + ' ' + EmpLNm AS EmpNm FROM tEmployee WHERE (EmpFNm + ' ' + EmpLNm LIKE '%"
+ EmpNm +
"%') ORDER BY EmpFNm + ' ' + EmpLNm"
,
"dbVSPNet"
);
return
table;
}
public
static
DataTable SqlGetDataTable(
string
query,
string
source)
{
string
connstr = ConfigurationManager.ConnectionStrings[source].ToString();
SqlConnection dbconn =
new
SqlConnection(connstr);
SqlDataAdapter dbadapter =
new
SqlDataAdapter(query, dbconn);
DataTable table =
new
DataTable();
try
{
dbadapter.Fill(table);
dbadapter =
null
;
}
finally
{
dbconn.Close();
}
return
table;
}
0
Hello Philip,
Please try using the following declaration of the combo and let me know whether it helps:
All the best,
Mira
the Telerik team
Please try using the following declaration of the combo and let me know whether it helps:
<
telerik:RadComboBox
ID
=
"dd_requester_filter"
Skin
=
"Office2007"
Width
=
"120px"
Font-Size
=
"11px"
Filter
=
"Contains"
AppendDataBoundItems
=
"true"
ShowMoreResultsBox
=
"true"
EnableLoadOnDemand
=
"true"
EnableVirtualScrolling
=
"true"
SelectedValue='<%# (Container as GridItem).OwnerTableView.GetColumn("ReqEmpID").CurrentFilterValue %>'
OnItemsRequested="dd_requester_filter_ItemsRequested" OnClientSelectedIndexChanged="RequesterIndexChanged"
DataTextField="EmpNm" DataValueField="EmpID" runat="server">
<
Items
>
<
telerik:RadComboBoxItem
Text
=
"All"
/>
</
Items
>
</
telerik:RadComboBox
>
All the best,
Mira
the Telerik team
Do you want to have your say when we set our development plans?
Do you want to know when a feature you care about is added or when a bug fixed?
Explore the
Telerik Public Issue Tracking
system and vote to affect the priority of the items
0
Philip Senechal
Top achievements
Rank 1
answered on 23 Jul 2010, 06:05 PM
Hi Mira,
As expected, that solution didn't work since there aren't any values bound to this filter dropdown when the page refreshes. I'm going to try adding some logic to the ItemDataBound event that attempts to read the currentfiltervalue, then does a lookup in that separate database to get the name, then assigns that to the text property of the filter dropdown. I'll let you know if it works. Thanks.
As expected, that solution didn't work since there aren't any values bound to this filter dropdown when the page refreshes. I'm going to try adding some logic to the ItemDataBound event that attempts to read the currentfiltervalue, then does a lookup in that separate database to get the name, then assigns that to the text property of the filter dropdown. I'll let you know if it works. Thanks.
0
Philip Senechal
Top achievements
Rank 1
answered on 23 Jul 2010, 07:48 PM
Hi Mira,
I believe I have resolved the issue with the following...
The EmployeeNameLookup function simply takes an ID and returns the name.
Thanks for the assistance!
I believe I have resolved the issue with the following...
protected
void
RadGrid1_ItemDataBound(
object
source, GridItemEventArgs e)
{
if
(e.Item
is
GridFilteringItem)
{
GridFilteringItem filterItem = (GridFilteringItem)e.Item;
string
ReqEmpID = e.Item.OwnerTableView.GetColumn(
"ReqEmpID"
).CurrentFilterValue;
RadComboBox combo = (RadComboBox)filterItem.FindControl(
"dd_requester_filter"
);
if
(ReqEmpID ==
""
)
{
combo.Text =
"All"
;
}
else
{
combo.Text = DataAccess.EmployeeNameLookup(ReqEmpID).ToString();
}
}
}
The EmployeeNameLookup function simply takes an ID and returns the name.
Thanks for the assistance!