Dear Experts,
I am implementing a web application. Because the system responsiveness in for me critical I decided to use RadrGrid with Client side binding. As the table shows some related data I would implement some filter templates with combo boxes. I was spending some time in finding a demo or guidelines to implement this scenario, but I found nothing useful.
Can anybody address me to any demo or at least give me some guidelines.
Any help
would be appreciated.
<
telerik:RadComboBox
id
=
"RadComboBox1"
Runat
=
"server"
Height
=
"140px"
Width
=
"350px"
Skin
=
"WebBlue"
ToolTip
=
"Müşteri Seçiniz"
AllowCustomText
=
"True"
MarkFirstMatch
=
"True"
AutoPostBack
=
"True"
onselectedindexchanged
=
"RadComboBox1_SelectedIndexChanged"
>
<
CollapseAnimation
Type
=
"OutQuint"
Duration
=
"200"
></
CollapseAnimation
>
</
telerik:RadComboBox
>
protected void RadGridUsers_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item is GridDataItem && !e.Item.IsInEditMode)
{
GridDataItem item = (GridDataItem)e.Item;
Literal litrl = (Literal)item["LocationID"].Controls[0];
CommonDataService commonDataService = new CommonDataService();
object dataBindingResult = DataBinder.Eval(item.DataItem, "LocationID");
if (dataBindingResult != null)
{
litrl.Text = commonDataService.LocationGetById(Int32.Parse(dataBindingResult.ToString())).LocationName;
}
}
}
When I try to filter Location column, it always brings back all records.
Cheers
William
<%@ Page Title="ViaConnect-Quick Poll" Language="C#" MasterPageFile="~/Student/StudentInterfaceMaster.Master"
AutoEventWireup="true" CodeBehind="QuickPoll.aspx.cs" Inherits="ViaStudent.Student.QuickPoll" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Charting" TagPrefix="telerik1" %>
<%@ Register Assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI.DataVisualization.Charting" TagPrefix="asp" %>
<
asp:Content
ID
=
"Content1"
ContentPlaceHolderID
=
"head"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
$(document).ready(function () {
$('#nav-primary-quick').addClass('selected');
});
</
script
>
<
script
type
=
"text/javascript"
language
=
"javascript"
>
var fooElement = document.getElementById("questionText");
</
script
>
</
asp:Content
>
<
asp:Content
ID
=
"Content2"
ContentPlaceHolderID
=
"ContentPlaceHolder1"
runat
=
"server"
>
<
style
type
=
"text/css"
>
.answer_container1
{
padding:0;
margin:10px;
font-size:12px;
width:100%;
}
.lblClass
{
width:662px;
}
</
style
>
<
telerik:RadWindowManager
ID
=
"RadWindowManager1"
runat
=
"server"
/>
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"TimerActiveTime"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblTimerActiveTime"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"rdoQuickAnswer"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"imgBtnRefresh"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblMessage"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"rdoQuickAnswer"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"panelQuickPoll"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblCheckAnswer"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"rdoQuickAnswer"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblMessage"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"imgBtnRefresh"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"panelQuickPoll"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"rdoQuickAnswer"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"imgBtnRefresh"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblMessage"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
div
class
=
"body_left_container"
>
<
div
class
=
"body_title_bg_box"
>
<
div
class
=
"body_title_left_bg"
></
div
>
<
div
class
=
"body_title_middle_bg font_16_blue"
>
<
div
class
=
"quickpoll_left_title"
>Quick Poll: </
div
>
<
div
class
=
"left"
>
<
asp:Timer
ID
=
"TimerActiveTime"
runat
=
"server"
OnTick
=
"TimerActiveTime_Tick"
Interval
=
"5000"
/>
<
asp:Label
ID
=
"lblTimerActiveTime"
runat
=
"server"
/>
</
div
>
</
div
>
<
div
class
=
"body_title_right_bg"
></
div
>
</
div
>
<
div
class
=
"question_container_1 font_18"
>
<
asp:Label
ID
=
"lblTypeOfAssesment"
runat
=
"server"
/></
div
>
<
div
class
=
"quiz_body_inner_box_2"
>
<
asp:Panel
ID
=
"panelQuestionText"
CssClass
=
"question_container"
runat
=
"server"
>
<
asp:Label
ID
=
"lblQuestionText"
runat
=
"server"
/>
<
div
class
=
"question_icon_1"
>
<
telerik:RadToolTip
ID
=
"questionToolTip"
runat
=
"server"
Animation
=
"Fade"
EnableShadow
=
"False"
Position
=
"TopCenter"
RenderInPageRoot
=
"true"
>
<
asp:Image
ID
=
"imgQuestionToolTip"
runat
=
"server"
/>
</
telerik:RadToolTip
>
<
asp:Image
ID
=
"imgQuestion"
runat
=
"server"
/>
</
div
>
</
asp:Panel
>
<
asp:Panel
ID
=
"panelAnswer"
CssClass
=
"answer_container1"
runat
=
"server"
>
<
asp:RadioButtonList
ID
=
"rdoQuickAnswer"
CssClass
=
"lblClass"
runat
=
"server"
CellPadding
=
"0"
CellSpacing
=
"10"
RepeatLayout
=
"Table"
OnSelectedIndexChanged
=
"rdoQuickAnswer_SelectedIndexChanged"
AutoPostBack
=
"true"
/>
<
div
class
=
"quiz_body_inner_box_2 font_16_grey"
>
<
asp:Label
ID
=
"lblMessage"
CssClass
=
"error_message"
runat
=
"server"
></
asp:Label
>
</
div
>
</
asp:Panel
>
<
div
id
=
"resultLabel"
runat
=
"server"
class
=
"font_14 bold"
visible
=
"false"
></
div
>
</
div
>
<
div
class
=
"quiz_test_box"
></
div
>
</
div
>
</
asp:Content
>
using
System;
using
System.Collections.Generic;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.HtmlControls;
using
System.Web.UI.WebControls;
using
System.Xml;
using
Telerik.Charting;
using
Telerik.Charting.Design;
using
Telerik.Charting.Styles;
using
Telerik.Web.UI;
using
ViaData;
using
ViaData.Entities;
using
ViaLibrary;
namespace
ViaStudent.Student
{
public
partial
class
QuickPoll : Navigation
{
private
ViaEntities contextVia =
new
ViaEntities();
private
int
studentClassId;
private
int
assessmentId;
private
DateTime startTimeUTC;
private
int
isCompletedCode;
private
int
assessmentQuestionId;
private
int
questionId;
private
string
questionText;
private
bool
questionHasMedia;
private
string
pollElapsedTime;
// Time elapsed since Quick Poll was published
private
bool
validPollExists =
true
;
// Is there a Quick Poll associated with this student/class
private
bool
isPollActive;
// If a Quick Poll exists, is it an active poll
int
rdoQuickAnswerIndex;
// rdoQuickAnswer selected index
protected
void
Page_Load(
object
sender, EventArgs e)
{
SetQuickPollDetails();
// Set ViewState variables
if
(!Page.IsPostBack)
{
if
(validPollExists)
{
SetCompletedStatus();
// Set isPollActive global variable
BindQuestionText();
// Sets question text label and image
BindRdoQuickAnswer();
// Sets RadioList options and images
SetMessages();
// Sets lblMessage text with student response info
}
else
{
TimerActiveTime.Enabled =
false
;
imgQuestion.Visible =
false
;
lblTimerActiveTime.Text =
"No Quick Polls exist for this class"
;
}
}
else
// Set global variables from ViewState
{
if
(validPollExists)
{
studentClassId = Convert.ToInt32(ViewState[
"StudentClassId"
]);
assessmentId = Convert.ToInt32(ViewState[
"AssessmentId"
]);
startTimeUTC = Convert.ToDateTime(ViewState[
"StartTimeUTC"
]);
assessmentQuestionId = Convert.ToInt32(ViewState[
"AssessmentQuestionId"
]);
questionId = Convert.ToInt32(ViewState[
"QuestionId"
]);
questionText = ViewState[
"QuestionText"
].ToString();
questionHasMedia = Convert.ToBoolean(ViewState[
"QuestionHasMedia"
].ToString());
}
}
if
(validPollExists)
{
ViewState[
"RdoQuickAnswerIndex"
] = rdoQuickAnswer.SelectedIndex;
rdoQuickAnswerIndex = rdoQuickAnswer.SelectedIndex;
TimeSpan timeElapsed = DateTime.UtcNow - startTimeUTC;
// Time elapsed since poll was started
pollElapsedTime = timeElapsed.ToString(
"hh':'mm':'ss"
);
// String format of timeElapsed
SetCompletedStatus();
if
(isPollActive)
lblTimerActiveTime.Text = pollElapsedTime;
else
lblTimerActiveTime.Text =
"Completed"
;
}
}
#region Private Methods
// Set global variables
private
void
SetQuickPollDetails()
{
student_class studentClass = (student_class)Session[
"studentClass"
];
// studentClass.student_class_id;
studentClassId = studentClass.student_class_id;
// StudentBase Session["studentClass"]
// Returns IList of Quick Polls: active first, then past poll, else empty list
var aqId = (from aq
in
contextVia.GetQuickPollByStudentClassId(studentClassId)
select aq).ToList();
if
(aqId.Count > 0)
// If at least one active or completed quick poll exists
{
validPollExists =
true
;
// If poll is active
if
(aqId[0].is_completed == (
int
)Enums.CompletedCode.Published)
isPollActive =
true
;
else
lblTimerActiveTime.Text =
"Completed"
;
// Set global variables from db or controls
assessmentId = aqId[0].assesment_id;
assessmentQuestionId = aqId[0].assesment_question_id;
isCompletedCode = Convert.ToInt32(aqId[0].is_completed);
startTimeUTC = Convert.ToDateTime(aqId[0].start_time);
questionId = Convert.ToInt32(aqId[0].question_id);
questionText = aqId[0].question_text.ToString();
questionHasMedia = Convert.ToBoolean(aqId[0].has_media);
// Set ViewState® variables from global variables
ViewState[
"StudentClassId"
] = studentClassId;
ViewState[
"AssessmentId"
] = assessmentId;
ViewState[
"AssessmentQuestionId"
] = assessmentQuestionId;
ViewState[
"StartTimeUTC"
] = startTimeUTC;
ViewState[
"IsCompletedCode"
] = isCompletedCode;
ViewState[
"QuestionId"
] = questionId;
ViewState[
"QuestionText"
] = questionText;
ViewState[
"QuestionHasMedia"
] = questionHasMedia;
}
else
// If no active or completed polls exist
{
validPollExists =
false
;
}
}
// Displays the question text
private
void
BindQuestionText()
{
lblQuestionText.Text = questionText;
lblQuestionText.Visible =
true
;
if
(questionHasMedia)
{
BindQuestionImage();
}
else
{
imgQuestion.Visible =
false
;
imgQuestionToolTip.Visible =
false
;
}
}
// Displays question image if one is present
private
void
BindQuestionImage()
{
var qpQuestionImage = (from qpi
in
contextVia.question_media
where qpi.question_id == questionId
select qpi).FirstOrDefault();
string
imageUrl =
"~/UserControls/Picture.ashx?s=40&QID="
+ questionId;
// Small image
string
imageUrlTT =
"~/UserControls/Picture.ashx?s=150&QID="
+ questionId;
// Larger, mouseover image
imgQuestion.Visible =
true
;
imgQuestionToolTip.Visible =
true
;
imgQuestion.ImageUrl = System.Web.HttpUtility.HtmlDecode(imageUrl);
questionToolTip.TargetControlID = imgQuestion.ID;
imgQuestionToolTip.ImageUrl = System.Web.HttpUtility.HtmlDecode(imageUrlTT);
imgQuestionToolTip.Height = 150;
imgQuestionToolTip.Width = 150;
}
// Populates RadioButtonList, rdoQuickAnswer
private
void
BindRdoQuickAnswer()
{
// Get all answers for this question (table answer_mcq)
IList<answer_mcq> qpAnswers = DBUtility.GetAssessmentOptions(questionId);
// Get IList of all student responses (each changed answer creates a new response) to this question
IList<response> studentResponse = DBUtility.GetStudentResponses(studentClassId, assessmentQuestionId);
// Clear rdoQuickAnswer item list. Avoids creating duplicates when Page_Load is hit twice
rdoQuickAnswer.Items.Clear();
for
(
int
i = 0; i < qpAnswers.Count; i++)
// For each student response to this question
{
// Create a list item setting the question id as the value and the question text as the text
ListItem listItem =
new
ListItem();
listItem.Text = qpAnswers[i].option_text;
listItem.Value = qpAnswers[i].mcq_id.ToString();
rdoQuickAnswer.Items.Add(listItem);
string
optionText = listItem.Text;
// Variable to hold question text
if
(Convert.ToBoolean(qpAnswers[i].has_image))
{
// Image path using the answer id as a query string value
string
imageUrl =
"~/UserControls/Picture.ashx?s=40&AIUID="
+ qpAnswers[i].mcq_id;
// Create image object dynamically using imageUrl string
System.Web.UI.WebControls.Image answerImg =
new
System.Web.UI.WebControls.Image();
// Create full URL from string URL and assign it to the image object
answerImg.ImageUrl = Page.ResolveUrl(imageUrl);
// Apply HTML and CSS formatting to the ListItem text to properly display the image
listItem.Text += (
"<div style=\"width: 50px; margin: 5px -20px 15px 0px; valign: middle;\"><img src='"
+ answerImg.ImageUrl +
"' /></div>"
);
rdoQuickAnswer.Items[i].Text = listItem.Text;
}
else
{
// If no image, set style for the ListItem for consistency
listItem.Text = optionText +
"<div style=\"width: 50px; margin: 5px 0px 15px 0px; valign: middle;\"></div>"
;
}
}
if
(!isPollActive)
rdoQuickAnswer.Enabled =
false
;
// If student has selected an option at least once
if
(studentResponse.Count > 0)
{
// Get most recent student response
string
answerMcq = studentResponse[0].mcq_answer_id.ToString().ToLower();
// Set rdoQuickAnswer selected option to the student's most recent answer selection
for
(
int
i = 0; i < rdoQuickAnswer.Items.Count; i++)
{
if
(rdoQuickAnswer.Items[i].Value.ToLower().CompareTo(answerMcq) == 0)
rdoQuickAnswer.SelectedIndex = i;
}
}
}
// Determines if poll is active
private
void
SetCompletedStatus()
{
isPollActive = DBUtility.IsAssessmentActive(assessmentId);
}
// Sets lblMessage text
private
void
SetMessages()
{
SetCompletedStatus();
// Get IList of all student responses (each changed answer creates a new response) to this question
IList<response> studentResponse = DBUtility.GetStudentResponses(studentClassId, assessmentQuestionId);
if
(studentResponse.Count > 0)
// If student has responded
{
if
(isPollActive)
{
lblMessage.Text =
"Currently selected answer is: "
+ rdoQuickAnswer.SelectedItem.Text;
}
else
{
lblTimerActiveTime.Text =
"Completed"
;
lblMessage.Text =
"Poll Completed: You selected: "
+ studentResponse[0].answer_text;
}
}
else
// If student has not responded
{
if
(isPollActive)
lblMessage.Text =
"You have not responded to this poll"
;
else
lblMessage.Text =
"You did not respond to this poll"
;
}
}
#endregion Private Methods
#region Control Events
protected
void
rdoQuickAnswer_SelectedIndexChanged(
object
sender, EventArgs e)
{
SetCompletedStatus();
if
(isPollActive)
{
int
index = Convert.ToInt32(ViewState[
"RdoQuickAnswerIndex"
]);
ListItem li = rdoQuickAnswer.Items[index];
int
mcqId = Convert.ToInt32(li.Value);
string
mcqAnswerText = li.Text;
int
responseCount = (from r
in
contextVia.responses
where r.student_class_id == studentClassId
&& r.assesment_question_id == assessmentQuestionId
select r.response_id).Count();
if
(responseCount == 0)
InsertNewResponse(mcqId);
else
UpdateResponse(mcqId);
int
selectedIndex = rdoQuickAnswer.SelectedIndex;
lblMessage.Text =
"Currently selected answer is : \""
+ mcqAnswerText +
"\""
;
rdoQuickAnswer.SelectedIndex = Convert.ToInt32(ViewState[
"RdoQuickAnswerIndex"
]);
SetMessages();
}
else
{
rdoQuickAnswer.Enabled =
false
;
}
}
// Adds a response to the database if it is the student's first response
private
void
InsertNewResponse(
int
mcqId)
{
// Get answer from DB based on currently selected mcq_id
var answerMcq = (from amcq
in
contextVia.answer_mcq
where amcq.mcq_id == mcqId
select amcq).FirstOrDefault();
// New student response object
response qpResponse =
new
response();
// Set response object's fields
qpResponse.assesment_question_id = assessmentQuestionId;
qpResponse.student_class_id = studentClassId;
qpResponse.answer_text = answerMcq.option_text;
qpResponse.is_correct = answerMcq.is_correct;
qpResponse.mcq_answer_id = answerMcq.mcq_id;
qpResponse.response_Date_Time = DateTime.UtcNow;
// Save response to DB
contextVia.responses.AddObject(qpResponse);
contextVia.SaveChanges();
}
//Updates a student's response choice if one currently exists
private
void
UpdateResponse(
int
mcqId)
{
// Get answer from DB based on currently selected mcq_id
var answerMcq = (from amcq
in
contextVia.answer_mcq
where amcq.mcq_id == mcqId
select amcq).FirstOrDefault();
var latestResponse = (from r
in
contextVia.responses
where r.student_class_id == studentClassId
&& r.assesment_question_id == assessmentQuestionId
orderby r.response_id descending
select r).FirstOrDefault();
latestResponse.mcq_answer_id = mcqId;
latestResponse.answer_text = answerMcq.option_text;
latestResponse.is_correct = answerMcq.is_correct;
latestResponse.response_Date_Time = DateTime.UtcNow;
contextVia.SaveChanges();
}
// TimerActiveTime: 5 second tick interval
protected
void
TimerActiveTime_Tick(
object
sender, EventArgs e)
{
SetCompletedStatus();
if
(isPollActive)
{
TimeSpan tickSpan = TimeSpan.Parse(lblTimerActiveTime.Text);
tickSpan = tickSpan.Add(TimeSpan.Parse(VConstants.QUICK_POLL_FREQUENCY));
lblTimerActiveTime.Text = tickSpan.ToString();
}
else
{
SetMessages();
TimerActiveTime.Enabled =
false
;
rdoQuickAnswer.Enabled =
false
;
lblTimerActiveTime.Text =
"Completed"
;
}
}
// Refresh chart control (currently unused)
protected
void
imgBtnRefresh_Click(
object
sender, ImageClickEventArgs e)
{
}
// Chart control (currently unused)
protected
void
chartQuickPoll_Customize(
object
sender, EventArgs e)
{
}
#endregion Control Events
}
}