Hello all,
I have a datagrid where i am using multiple filtering and each one contains a dropdown list for multiple selection, the thing is when i change the checkboxes the code is firing, but the datagrid is not showing the changes and not rebinding.
The code
Many thanks
I have a datagrid where i am using multiple filtering and each one contains a dropdown list for multiple selection, the thing is when i change the checkboxes the code is firing, but the datagrid is not showing the changes and not rebinding.
<
telerik:RadGrid
ID
=
"GridMedical"
runat
=
"server"
ShowStatusBar
=
"True"
OnPreRender
=
"RadGrid1_PreRender"
OnNeedDataSource
=
"RadGrid1_NeedDataSource"
AutoGenerateColumns
=
"False"
PageSize
=
"20"
AllowSorting
=
"True"
AllowAutomaticInserts
=
"False"
AllowPaging
=
"True"
AllowAutomaticDeletes
=
"False"
AllowAutomaticUpdates
=
"False"
Width
=
"835px"
FilterType
=
"CheckedList"
AllowFilteringByColumn
=
"True"
GridLines
=
"None"
CellSpacing
=
"0"
>
<
ExportSettings
>
<
Pdf
>
<
PageHeader
>
<
LeftCell
Text
=
""
/>
<
MiddleCell
Text
=
""
/>
<
RightCell
Text
=
""
/>
</
PageHeader
>
<
PageFooter
>
<
LeftCell
Text
=
""
/>
<
MiddleCell
Text
=
""
/>
<
RightCell
Text
=
""
/>
</
PageFooter
>
</
Pdf
>
</
ExportSettings
>
<
MasterTableView
InsertItemDisplay
=
"Top"
InsertItemPageIndexAction
=
"ShowItemOnFirstPage"
DataKeyNames
=
"StudentID"
EditMode
=
"EditForms"
AutoGenerateColumns
=
"false"
AllowMultiColumnSorting
=
"False"
Width
=
"100%"
CommandItemDisplay
=
"Top"
Name
=
"medStudents"
>
<
CommandItemSettings
ShowExportToPdfButton
=
"true"
/>
<
RowIndicatorColumn
FilterControlAltText
=
"Filter RowIndicator column"
Visible
=
"True"
>
</
RowIndicatorColumn
>
<
ExpandCollapseColumn
FilterControlAltText
=
"Filter ExpandColumn column"
Visible
=
"True"
>
</
ExpandCollapseColumn
>
<
Columns
>
<
telerik:GridBoundColumn
SortExpression
=
"StudentID"
ShowFilterIcon
=
"false"
AllowFiltering
=
"false"
HeaderText
=
"#"
HeaderButtonType
=
"TextButton"
DataField
=
"StudentID"
UniqueName
=
"StudentID"
MaxLength
=
"7"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"StudentName"
HeaderText
=
"Name"
HeaderButtonType
=
"TextButton"
DataField
=
"StudentName"
UniqueName
=
"StudentName"
MaxLength
=
"40"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"Grade"
HeaderText
=
"Gr"
HeaderButtonType
=
"TextButton"
DataField
=
"Grade"
UniqueName
=
"Grade"
>
<
FilterTemplate
>
<
telerik:RadComboBox
ID
=
"RadComboGrades"
runat
=
"server"
DataSourceID
=
"SqlDataSourceFilterGrades"
DataValueField
=
"Grd"
DataTextField
=
"Grd"
EmptyMessage
=
"All"
AllowCustomText
=
"true"
Width
=
"60px"
>
<
ItemTemplate
>
<
asp:CheckBox
runat
=
"server"
Checked
=
"true"
ID
=
"grades_chk1"
onclick
=
"onCheckBoxClickGrades(this)"
/>
<%# Eval("Grd")%>
</
ItemTemplate
>
<
FooterTemplate
>
<
asp:Button
ID
=
"clrFiltersGrades"
runat
=
"server"
Text
=
"Clear"
OnClick
=
"clrFiltersGrades_Click"
/>
</
FooterTemplate
>
</
telerik:RadComboBox
>
<
telerik:RadScriptBlock
ID
=
"RadScriptBlock2"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function onCheckBoxClickGrades(chk) {
var text = "", values = "";
var tableView = $find("<%# ((GridItem)Container).OwnerTableView.ClientID %>");
var combo = $find('<%# ((GridItem)Container).FindControl("RadComboGrades").ClientID %>');
//get the collection of all items
var items = combo.get_items();
//enumerate all items
for (var i = 0; i <
items.get_count
(); i++) {
var
item
=
items
.getItem(i);
//get the checkbox element of the current item
var chk1 = $get(combo.get_id() + "_i" + i + "_grades_chk1");
if (chk1.checked) {
text += item.get_text() + ",";
values += item.get_value() + ",";
}
}
//remove the last comma from the string
text
=
removeLastComma
(text);
values
=
removeLastComma
(values);
$find("<%= RadAjaxManager1.ClientID %>").ajaxRequest("Grades," + values);
}
function removeLastComma(str) {
return str.replace(/,$/, "");
}
</
script
>
</
telerik:RadScriptBlock
>
</
FilterTemplate
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"Class"
HeaderText
=
"Cl"
HeaderButtonType
=
"TextButton"
DataField
=
"Class"
UniqueName
=
"Class"
>
<
FilterTemplate
>
<
telerik:RadComboBox
ID
=
"RadComboClasses"
runat
=
"server"
DataSourceID
=
"SqlDataSourceFilterGrades"
DataValueField
=
"Grd"
DataTextField
=
"Grd"
EmptyMessage
=
"All"
AllowCustomText
=
"true"
Width
=
"60px"
>
<
ItemTemplate
>
<
asp:CheckBox
runat
=
"server"
Checked
=
"true"
ID
=
"classes_chk1"
onclick
=
"onCheckBoxClickClasses(this)"
/>
<%# Eval("Grd")%>
</
ItemTemplate
>
<
FooterTemplate
>
<
asp:Button
ID
=
"clrFiltersClasses"
runat
=
"server"
Text
=
"Clear"
OnClick
=
"clrFiltersGrades_Click"
/>
</
FooterTemplate
>
</
telerik:RadComboBox
>
<
telerik:RadScriptBlock
ID
=
"RadScriptBlock3"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function onCheckBoxClickClasses(chk) {
var text = "", values = "";
var tableView = $find("<%# ((GridItem)Container).OwnerTableView.ClientID %>");
var combo = $find('<%# ((GridItem)Container).FindControl("RadComboClasses").ClientID %>');
//get the collection of all items
var items = combo.get_items();
//enumerate all items
for (var i = 0; i <
items.get_count
(); i++) {
var
item
=
items
.getItem(i);
//get the checkbox element of the current item
var chk1 = $get(combo.get_id() + "_i" + i + "_classes_chk1");
if (chk1.checked) {
text += item.get_text() + ",";
values += item.get_value() + ",";
}
}
//remove the last comma from the string
text
=
removeLastComma
(text);
values
=
removeLastComma
(values);
$find("<%= RadAjaxManager1.ClientID %>").ajaxRequest("Classes," + values);
}
function removeLastComma(str) {
return str.replace(/,$/, "");
}
</
script
>
</
telerik:RadScriptBlock
>
</
FilterTemplate
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"MedicalName"
HeaderText
=
"Issue"
HeaderButtonType
=
"TextButton"
DataField
=
"MedicalName"
UniqueName
=
"MedicalName"
>
<
FilterTemplate
>
<
telerik:RadComboBox
ID
=
"RadComboBox1"
runat
=
"server"
DataSourceID
=
"SqlDataSourceFilterMedical"
DataValueField
=
"MedID"
DataTextField
=
"MedicalName"
EmptyMessage
=
"All"
AllowCustomText
=
"true"
Width
=
"90px"
>
<
ItemTemplate
>
<
asp:CheckBox
runat
=
"server"
Checked
=
"true"
ID
=
"chk1"
onclick
=
"onCheckBoxClick(this)"
/>
<%# Eval("MedicalName")%>
</
ItemTemplate
>
<
FooterTemplate
>
<
asp:Button
ID
=
"clrFilters"
runat
=
"server"
Text
=
"Clear"
OnClick
=
"clrFilters_Click"
/>
</
FooterTemplate
>
</
telerik:RadComboBox
>
<
telerik:RadScriptBlock
ID
=
"RadScriptBlock1"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function onCheckBoxClick(chk) {
var text = "", values = "";
var tableView = $find("<%# ((GridItem)Container).OwnerTableView.ClientID %>");
var combo = $find('<%# ((GridItem)Container).FindControl("RadComboBox1").ClientID %>');
//get the collection of all items
var items = combo.get_items();
//enumerate all items
for (var i = 0; i <
items.get_count
(); i++) {
var
item
=
items
.getItem(i);
//get the checkbox element of the current item
var chk1 = $get(combo.get_id() + "_i" + i + "_chk1");
if (chk1.checked) {
text += item.get_text() + ",";
values += item.get_value() + ",";
}
}
//remove the last comma from the string
text
=
removeLastComma
(text);
values
=
removeLastComma
(values);
$find("<%= RadAjaxManager1.ClientID %>").ajaxRequest("MedicalName," + values);
}
function removeLastComma(str) {
return str.replace(/,$/, "");
}
</
script
>
</
telerik:RadScriptBlock
>
</
FilterTemplate
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"MedLevel"
HeaderText
=
"Level"
HeaderButtonType
=
"TextButton"
DataField
=
"MedLevel"
UniqueName
=
"MedLevel"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"Notes"
HeaderText
=
"Notes"
HeaderButtonType
=
"TextButton"
DataField
=
"Notes"
UniqueName
=
"Notes"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"HospitalName"
HeaderText
=
"Hospital"
HeaderButtonType
=
"TextButton"
AllowFiltering
=
"false"
DataField
=
"HospitalName"
UniqueName
=
"HospitalName"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"FileNumber"
HeaderText
=
"File #"
HeaderButtonType
=
"TextButton"
AllowFiltering
=
"false"
DataField
=
"FileNumber"
UniqueName
=
"FileNumber"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"PhoneNumber"
HeaderText
=
"Phone"
HeaderButtonType
=
"TextButton"
AllowFiltering
=
"false"
DataField
=
"PhoneNumber"
UniqueName
=
"PhoneNumber"
>
</
telerik:GridBoundColumn
>
</
Columns
>
<
BatchEditingSettings
EditType
=
"Cell"
/>
<
PagerStyle
AlwaysVisible
=
"True"
PageSizeControlType
=
"RadComboBox"
/>
</
MasterTableView
>
<
PagerStyle
AlwaysVisible
=
"True"
PageSizeControlType
=
"RadComboBox"
/>
<
FilterMenu
EnableImageSprites
=
"False"
>
</
FilterMenu
>
</
telerik:RadGrid
>
<
asp:SqlDataSource
ID
=
"SqlDataSourceFilterGrades"
runat
=
"server"
ConnectionString="<%$ ConnectionStrings:EduZeeRep.Properties.Settings.EschoolTestV3Reporting %>"
SelectCommand="SELECT DISTINCT CAST(Grade as int) AS Grd FROM AttStudents ORDER BY CAST(Grade as int) ASC">
</
asp:SqlDataSource
>
<
asp:SqlDataSource
ID
=
"SqlDataSourceFilterMedical"
runat
=
"server"
ConnectionString="<%$ ConnectionStrings:EduZeeRep.Properties.Settings.EschoolTestV3Reporting %>"
SelectCommand="SELECT DISTINCT MedID,MedicalName FROM EscMedicalIssues">
</
asp:SqlDataSource
>
<
asp:SqlDataSource
ID
=
"SqlDataSourceMedicalIssues"
runat
=
"server"
ConnectionString="<%$ ConnectionStrings:EduZeeRep.Properties.Settings.EschoolTestV3Reporting %>"
SelectCommand="SELECT AttStudents.EnName + ' ' + AttStudents.FamilyEnName AS StudentName, AttStudents.StudentID, EscMedicalIssues.MedicalName, AttStudents.Class,
AttStudents.Grade, EscMedicalLinks.MedLevel, EscMedicalLinks.HospitalName, EscMedicalLinks.FileNumber, EscMedicalLinks.PhoneNumber,
EscMedicalLinks.Notes
FROM AttStudents INNER JOIN
EscMedicalLinks ON AttStudents.StudentID = EscMedicalLinks.StudentID INNER JOIN
EscMedicalIssues ON EscMedicalLinks.MedID = EscMedicalIssues.MedID">
</
asp:SqlDataSource
>
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
DefaultLoadingPanelID
=
"RadAjaxLoadingPanel1"
OnAjaxRequest
=
"RadAjaxManager1_AjaxRequest"
>
<
ajaxsettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"RadAjaxManager1"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"GridMedical"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"clrFilters"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"GridMedical"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
ajaxsettings
>
</
telerik:RadAjaxManager
>
<
telerik:RadAjaxLoadingPanel
ID
=
"RadAjaxLoadingPanel1"
runat
=
"server"
Skin
=
"Default"
/>
The code
protected void RadGrid1_PreRender(object sender, EventArgs e)
{
if (ViewState["filterRawString"] != null)
{
foreach (GridFilteringItem item in GridMedical.MasterTableView.GetItems(GridItemType.FilteringItem))
{
RadComboBox combo = (RadComboBox)item.FindControl("RadComboBox1");
foreach (RadComboBoxItem comboItem in combo.Items)
{
if (ViewState["filterRawString"].ToString().Contains(comboItem.Value.ToString()))
{
CheckBox chk = (CheckBox)comboItem.FindControl("chk1");
chk.Checked = true;
}
else
{
CheckBox chk = (CheckBox)comboItem.FindControl("chk1");
chk.Checked = false;
}
}
RadComboBox comboGrades = (RadComboBox)item.FindControl("RadComboBoxGrades");
foreach (RadComboBoxItem comboItemGrade in comboGrades.Items)
{
if (ViewState["filterRawString"].ToString().Contains(comboItemGrade.Value.ToString()))
{
CheckBox chk = (CheckBox)comboItemGrade.FindControl("grades_chk1");
chk.Checked = true;
}
else
{
CheckBox chk = (CheckBox)comboItemGrade.FindControl("grades_chk1");
chk.Checked = false;
}
}
}
}
}
protected void RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e)
{
string str = e.Argument.ToString();
DataSet _dsUs = new DataSet();
//String query = "SELECT usr.*, usr.FirstNameEn+' '+usr.FamilyNameEn AS EnglishName, dept.DepEn AS DepartID,dept.DepID AS DeparID,sub.SubEn,sub.SubID,ad.ADID, ad.ADEn,st.StageID,st.StageEn FROM AttUsers usr,AttStages st, AttAcademicalDegrees ad, AttDepartments dept, AttSubjects sub WHERE st.StageID=usr.Stage AND ad.ADID=usr.AcademicalDegree AND sub.SubID=usr.Subject AND usr.Department=dept.DepID AND sub.SubEn='" + str.Split(',')[1] +"'";
if (str.Split(',')[0] == "MedicalName")
{
String query = "SELECT AttStudents.EnName + ' ' + AttStudents.FamilyEnName AS StudentName, AttStudents.StudentID, EscMedicalIssues.MedicalName, AttStudents.Class, AttStudents.Grade, EscMedicalLinks.MedLevel, EscMedicalLinks.HospitalName, EscMedicalLinks.FileNumber, EscMedicalLinks.PhoneNumber, EscMedicalLinks.Notes FROM AttStudents INNER JOIN EscMedicalLinks ON AttStudents.StudentID = EscMedicalLinks.StudentID INNER JOIN EscMedicalIssues ON EscMedicalLinks.MedID = EscMedicalIssues.MedID WHERE EscMedicalIssues.MedID='" + str.Split(',')[1] + "'";
for (int i = 2; i < str.Split(',').Length; i++)
{
query = query + " OR EscMedicalIssues.MedID='" + str.Split(',')[i] + "'";
}
ViewState["filterRawString"] = str;
_dsUs = GetSQLDataSet(query);
GridMedical.DataSource = _dsUs.Tables[0];
GridMedical.Rebind();
GridFilteringItem filterItem = GridMedical.MasterTableView.GetItems(GridItemType.FilteringItem)[0] as GridFilteringItem;
RadComboBox combo = (RadComboBox)filterItem.FindControl("RadComboBox1");
RadAjaxManager1.ResponseScripts.Add("$find('" + combo.ClientID + "').showDropDown();");
}
if (str.Split(',')[0] == "Grades")
{
String query = "SELECT AttStudents.EnName + ' ' + AttStudents.FamilyEnName AS StudentName, AttStudents.StudentID, EscMedicalIssues.MedicalName, AttStudents.Class, AttStudents.Grade, EscMedicalLinks.MedLevel, EscMedicalLinks.HospitalName, EscMedicalLinks.FileNumber, EscMedicalLinks.PhoneNumber, EscMedicalLinks.Notes FROM AttStudents INNER JOIN EscMedicalLinks ON AttStudents.StudentID = EscMedicalLinks.StudentID INNER JOIN EscMedicalIssues ON EscMedicalLinks.MedID = EscMedicalIssues.MedID WHERE AttStudents.Grade='" + str.Split(',')[1] + "'";
for (int i = 2; i < str.Split(',').Length; i++)
{
query = query + " OR AttStudents.Grade='" + str.Split(',')[i] + "'";
}
ViewState["filterRawString"] = str;
_dsUs = GetSQLDataSet(query);
GridMedical.DataSource = _dsUs.Tables[0];
GridMedical.Rebind();
GridFilteringItem filterItem = GridMedical.MasterTableView.GetItems(GridItemType.FilteringItem)[0] as GridFilteringItem;
RadComboBox combo = (RadComboBox)filterItem.FindControl("RadComboBoxGrades");
RadAjaxManager1.ResponseScripts.Add("$find('" + combo.ClientID + "').showDropDown();");
}
}
protected void RadGrid1_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
DataSet _dsUsrs = new DataSet();
_dsUsrs = GetSQLDataSet("SELECT AttStudents.EnName + ' ' + AttStudents.FamilyEnName AS StudentName, AttStudents.StudentID, EscMedicalIssues.MedicalName, AttStudents.Class, AttStudents.Grade, EscMedicalLinks.MedLevel, EscMedicalLinks.HospitalName, EscMedicalLinks.FileNumber, EscMedicalLinks.PhoneNumber, EscMedicalLinks.Notes FROM AttStudents INNER JOIN EscMedicalLinks ON AttStudents.StudentID = EscMedicalLinks.StudentID INNER JOIN EscMedicalIssues ON EscMedicalLinks.MedID = EscMedicalIssues.MedID");
if (ViewState["filterRawString"] == null)
{
GridMedical.DataSource = _dsUsrs.Tables[0];
}
}
protected void clrFilters_Click(object sender, EventArgs e)
{
foreach (GridColumn column in GridMedical.MasterTableView.Columns)
{
column.CurrentFilterFunction = GridKnownFunction.NoFilter;
column.CurrentFilterValue = string.Empty;
}
GridMedical.MasterTableView.FilterExpression = string.Empty;
GridMedical.MasterTableView.Rebind();
}
protected void clrFiltersGrades_Click(object sender, EventArgs e)
{
foreach (GridColumn column in GridMedical.MasterTableView.Columns)
{
column.CurrentFilterFunction = GridKnownFunction.NoFilter;
column.CurrentFilterValue = string.Empty;
}
GridMedical.MasterTableView.FilterExpression = string.Empty;
GridMedical.MasterTableView.Rebind();
}
Many thanks