I find an issue in Radgrid. I couldnt fix it. I create some columns programmatically. When I hide colum from header context menu, some blank colum is appear al last. Copy aspx, aspx.cs and Image (before and after hide column)... ASPX: <%@ Page Title="" Language="C#" MasterPageFile="~/UI/Doculex.Master" AutoEventWireup="true" CodeBehind="DocumentsList.aspx.cs" Inherits="WebSearch.UI.DocumentsList" %>
<%@ MasterType VirtualPath="~/UI/Doculex.Master" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<telerik:RadAjaxPanel runat="server" EnableViewState="true" EnableEmbeddedScripts="true" EnableAJAX= "false" >
<div class="headerPage">
<asp:Label ID="lblTitle" runat="server"></asp:Label>
</div>
<div class="containerSub" id ="containerSub" runat="server">
<telerik:RadSplitter ID ="Splitter" Width = "100%" Height ="100%" Orientation="Vertical" runat="server">
<telerik:RadPane runat="server" ID="gridPane" Scrolling="None" Height="80%" Width="100%">
<telerik:RadGrid ID="DocumentGrid" runat="server"
AllowPaging="True" AllowSorting="True"
AllowFilteringByColumn="true"
CellSpacing="0" Height="500px"
EnableHeaderContextMenu ="true" EnableHeaderContextFilterMenu="true"
GridLines="None" AllowMultiRowSelection="true"
PageSize="12" AutoGenerateColumns="false" Width="100%"
EnableLinqExpressions="false" EnableViewState="True"
onneeddatasource="DocumentGrid_NeedDataSource"
onprerender="DocumentGrid_PreRender"
onitemcommand="DocumentGrid_ItemCommand" >
<ItemStyle VerticalAlign="Top" />
<GroupingSettings CaseSensitive="false" />
<MasterTableView CommandItemDisplay="None" DataKeyNames="Id"
TableLayout="Auto" PagerStyle-Mode="NumericPages" >
<Columns>
<telerik:GridClientSelectColumn CommandName="Select" UniqueName="Select"></telerik:GridClientSelectColumn>
</Columns>
</MasterTableView>
<ClientSettings Scrolling-SaveScrollPosition="true" EnablePostBackOnRowClick="true" Scrolling-AllowScroll="true" ActiveRowIndex="true" AllowColumnsReorder="true" AllowColumnHide="true">
<Selecting AllowRowSelect="true" />
<ClientEvents OnColumnHidden="ColumnHiding" />
<Resizing AllowColumnResize="true"></Resizing>
</ClientSettings>
</telerik:RadGrid>
</telerik:RadPane>
<telerik:RadPane ID="searchPane" Width="20px" runat="server" Scrolling="None" Height="350px" >
<telerik:RadSlidingZone runat="server" ID="PaneZone" SlideDirection="Left" >
<telerik:RadSlidingPane ID="DocPreview" runat="server" Width="300px" OnClientDocked = "PaneDockDocPreview"
OnClientUndocked = "PaneUnDockDocPreview">
<div Id="preview" runat="server"></div>
</telerik:RadSlidingPane>
<telerik:RadSlidingPane ID="Properties" runat="server" Width="300px" OnClientDocked = "PaneDockProperties"
OnClientUndocked = "PaneUnDockProperties" IconUrl="~/UI/Images/properties.png">
<div id="PropertyList" style="margin-top:5%" runat="server" visible="true">
</div>
</telerik:RadSlidingPane>
<telerik:RadSlidingPane Scrolling="Y" ID="FileNotesPane" runat="server" Width="300px" OnClientDocked = "PaneDockNotes"
OnClientUndocked = "PaneUnDockNotes" IconUrl="~/UI/Images/note.png" visible="false">
<div id="Div1" style="margin-top:5%; width:100%" runat="server">
<asp:LinkButton ID="lnkAddComment" runat="server" onclick="lnkAddComment_Click" >
<asp:ImageButton ID="imgAdd" runat="server" ImageUrl="~/UI/Images/add.png" />
<asp:Label ID="lblAddComment" runat="server" /></asp:LinkButton> </div><div class="clear"></div>
<asp:Panel ID="pnlComment" Visible="false" runat="server">
<table style="width:100%">
<tr>
<td><asp:Label ID="lblComent" runat="server"></asp:Label></td><td></td></tr>
<tr>
<td ><asp:TextBox TextMode="MultiLine" CssClass="commentsWithScroll" Wrap="true" ID="txtComents" runat="server"></asp:TextBox>
<telerik:RadSpell ID="spellComments" Runat="server" ControlToCheck="txtComents" />
<asp:RequiredFieldValidator ID="rfvComment" runat="server" ControlToValidate="txtComents" Display="Dynamic" ErrorMessage="*" CssClass="validator" />
<asp:RegularExpressionValidator ID="rExpComments" runat="server" ControlToValidate="txtComents" CssClass="validator"
Display="Dynamic" ValidationExpression="^([\S\s]{1,280})$"></asp:RegularExpressionValidator> </td>
<td style="text-align:right"><asp:ImageButton ID="imgSave" runat="server" OnClick="imgSave_Click" ImageUrl="~/UI/Images/add.png" />
<asp:ImageButton ID="imgCancel" runat="server" ImageUrl="~/UI/Images/cancel.png" OnClick="imgCancel_Click" /></td>
</tr></table>
<div class="clear"></div>
</asp:Panel><asp:Repeater ID="NotesRepeater" runat="server">
<ItemTemplate>
<div class="note">
<div class="dateNote">
<%# Eval("Date") %>
</div>
<div class="ownerNote">
<%# Eval("OwnerComment")%>
</h3>
<div class="commentNote">
<%# Eval("Comments")%>
</div>
</div>
<div class="clear"></div>
</ItemTemplate>
</asp:Repeater>
</telerik:RadSlidingPane>
</telerik:RadSlidingZone>
</telerik:RadPane>
</telerik:RadSplitter>
</div>
</telerik:RadAjaxPanel>
</asp:Content>
ASPX.Cs using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.IO;
using System.Resources;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using WebSearch.Components;
using WebSearch.SecurityModel;
using WebSearch.UI.Model;
using WebSearch.UI.Model.Items.Grid;
using WebSearch.UI.Model.Screen;
namespace WebSearch.UI
{
public partial class DocumentsList : System.Web.UI.Page
{
#region Properties
private string _culture;
private ResourceManager _resources;
private readonly smOrganization _organization= new smOrganization();
private List<string> hideColum = new List<string>();
#endregion
#region Events
protected void Page_Load(object sender, EventArgs e)
{
GetInfo();
if (Page.IsPostBack)
{
App.SavePreferencesGrid(DocumentGrid);
App.SavePane();
if(DocumentGrid.MasterTableView.GetSelectedItems().Length ==0)
{
Session["SelectedRows"] = null;
if (Request.QueryString["A"] == "pop" || Request.QueryString["A"] == "note")
{
Response.Redirect("~/UI/DocumentsList.aspx");
}
}
}
if (!Page.IsPostBack)
{
LoadSettings();
App.LoadPreferencesGrid(DocumentGrid);
App.LoadPane(PaneZone);
LoadCorrectAction();
}
DocumentGrid.HeaderContextMenu.ItemCreated += new RadMenuEventHandler(HeaderContextMenu_ItemCreated);
}
protected void Page_Init(object sender, EventArgs e)
{
CreateColumns();
}
void HeaderContextMenu_ItemCreated(object sender, RadMenuEventArgs e)
{
CommonFunctions.HideColumns(sender, e);
CommonFunctions.HideSpecialColumns("Select", e.Item);
CommonFunctions.HideSpecialColumns("Id", e.Item);
CommonFunctions.HideSpecialColumns("Path", e.Item);
CommonFunctions.HideSpecialColumns("FileName", e.Item);
}
protected void lnkAddComment_Click(object sender, EventArgs e)
{
pnlComment.Visible = true;
txtComents.Text = null;
lnkAddComment.Visible = false;
}
protected void DocumentGrid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
DocumentGrid.DataSource = GenericGrid.ListDocuments;
}
protected void DocumentGrid_PreRender(object sender, EventArgs e)
{
DocumentGrid.MasterTableView.GetColumnSafe("RowIndicator").Display = false;
DocumentGrid.MasterTableView.GetColumnSafe("Id").Display = false;
DocumentGrid.MasterTableView.GetColumnSafe("Path").Display = false;
if (hideColum.Count > 0)
{
foreach (string col in hideColum)
{
DocumentGrid.MasterTableView.GetColumnSafe(col).Display = false;
}
}
CommonFunctions.GridOptions(DocumentGrid);
}
protected void imgSave_Click(object sender, ImageClickEventArgs e)
{
if (!Page.IsValid) return;
string comment = txtComents.Text.Trim();
_organization.FileNotes = new smFileNotes
{
Comments = comment,
UserId = App.CurrentUserId(),
FileId = Convert.ToInt16(Session["ID"].ToString()),
Date = DateTime.Now,
};
_organization.CreateNote();
pnlComment.Visible = false;
LoadNotes();
lnkAddComment.Visible = true;
}
protected void imgCancel_Click(object sender, ImageClickEventArgs e)
{
txtComents.Text = null;
pnlComment.Visible = false;
lnkAddComment.Visible = true;
}
protected void DocumentGrid_ItemCommand(object sender, GridCommandEventArgs e)
{
switch (e.CommandName)
{
case "RowClick":
Session["SelectedRows"] = null;
Properties.Visible = false;
FileNotesPane.Visible = false;
if (DocumentGrid.MasterTableView.GetSelectedItems().Length == 0)
{
preview.InnerHtml = null;
PaneZone.DockedPaneId = null;
PaneZone.ExpandedPaneId = null;
gridPane.Width = Unit.Empty;
searchPane.Width = Unit.Pixel(20);
return;
}
if (DocumentGrid.MasterTableView.GetSelectedItems().Length == 1)
{
Preview();
Session["SelectedRows"] = DocumentGrid.MasterTableView.GetSelectedItems();
Session["tab"] = Convert.ToString((int)Doculex.Tabs.ActiveDocument);
}
if (DocumentGrid.MasterTableView.GetSelectedItems().Length > 1)
{
Session["SelectedRows"] = DocumentGrid.MasterTableView.GetSelectedItems();
Session["tab"] = Convert.ToString((int)Doculex.Tabs.MultipleDocument);
PaneZone.ExpandedPaneId = "";
PaneZone.DockedPaneId = "";
FileNotesPane.Visible = false;
Properties.Visible = false;
}
((HtmlGenericControl)Master.FindControl("header")).Controls.Clear();
if (Session["container"] != null)
{
UIContainer _container = (UIContainer)Session["container"];
MenuScreen _menu = new MenuScreen(Convert.ToInt16(Session["tab"]));
Session["menu"] = _menu;
_container.Menu = (MenuScreen)Session["menu"];
((HtmlGenericControl)Master.FindControl("header")).Controls.Add(_container.RenderHeader());
}
break;
}
}
#endregion
#region Methods
private void LoadCorrectAction()
{
if (Request.QueryString["A"] == "prop")
{
LoadProperties();
}
if (Request.QueryString["A"] == "note")
{
LoadNotes();
}
}
private void CreateColumns()
{
List<smDocumentTypeField> documentTypeFieldList = _organization.GetDocumentTypeField(1);
GridBoundColumn boundColumnId = new GridBoundColumn();
DocumentGrid.MasterTableView.Columns.Add(boundColumnId);
boundColumnId.DataField = "Id";
boundColumnId.UniqueName = "Id";
boundColumnId.Visible = false;
boundColumnId.HeaderStyle.Width = Unit.Pixel(1);
boundColumnId.ItemStyle.Width = Unit.Pixel(1);
boundColumnId = new GridBoundColumn();
DocumentGrid.MasterTableView.Columns.Add(boundColumnId);
boundColumnId.DataField = "Path";
boundColumnId.UniqueName = "Path";
boundColumnId.Visible = false;
GridImageColumn imgeColum = new GridImageColumn();
DocumentGrid.MasterTableView.Columns.Add(imgeColum);
imgeColum.DataImageUrlFields = new string[] { "Image" };
imgeColum.HeaderText = "File Type";
imgeColum.DataImageUrlFormatString = "~/UI/Images/{0}";
imgeColum.ImageAlign = ImageAlign.Middle;
imgeColum.AllowFiltering = false;
imgeColum.UniqueName = "Image";
foreach (smDocumentTypeField documentTypeField in documentTypeFieldList)
{
GridBoundColumn boundColumn = new GridBoundColumn();
DocumentGrid.MasterTableView.Columns.Add(boundColumn);
boundColumn.DataField = documentTypeField.Name;
boundColumn.HeaderText = documentTypeField.Header;
boundColumn.UniqueName = documentTypeField.Name;
boundColumn.Visible = documentTypeField.IsVisible;
if (documentTypeField.IsVisible == false)
{
hideColum.Add(documentTypeField.Name);
}
}
}
private void GetInfo()
{
_culture = App.CurrentCulture();
_resources = App.GetMasterResources("DocumentsList");
}
private void LoadSettings()
{
lblTitle.Text = _resources.GetString(lblTitle.ID, new CultureInfo(_culture));
DocPreview.IconUrl = VirtualPathUtility.ToAbsolute("~/UI/Images/preview.png");
DocPreview.TabView = SplitterSlidePaneTabView.ImageOnly;
DocPreview.Title = _resources.GetString("TitleViewPane", new CultureInfo(_culture));
DocPreview.UndockText =
_resources.GetString("UndockViewPane", new CultureInfo(_culture));
DocPreview.DockText =
_resources.GetString("DockViewPane", new CultureInfo(_culture));
DocPreview.ToolTip =
_resources.GetString("ToolTipViewPane", new CultureInfo(_culture));
PaneZone.Style.Add("position", "static");
Properties.Visible = false;
FileNotesPane.Visible = false;
// DocPreview.Visible = false;
}
private void LoadSettingsNotes()
{
//spellComments.Language = _culture;
//spellComments.DictionaryLanguage = _culture;
FileNotesPane.TabView = SplitterSlidePaneTabView.ImageOnly;
FileNotesPane.Title = _resources.GetString("TitleNotesPane", new CultureInfo(_culture));
Properties.UndockText =
_resources.GetString("UndockNotesPane", new CultureInfo(_culture));
FileNotesPane.DockText =
_resources.GetString("DockNotesPane", new CultureInfo(_culture));
FileNotesPane.ToolTip =
_resources.GetString("ToolTipNotesPane", new CultureInfo(_culture));
FileNotesPane.Visible = true;
Properties.Visible = false;
// DocPreview.Visible = true;
ImageButton imgSave = (pnlComment.FindControl("imgSave") as ImageButton);
ImageButton imgCancel = (pnlComment.FindControl("imgCancel") as ImageButton);
RegularExpressionValidator rExpComments = (pnlComment.FindControl("rExpComments") as RegularExpressionValidator);
lblAddComment.Text = _resources.GetString(lblAddComment.ID, new CultureInfo(_culture));
imgSave.ToolTip = _resources.GetString(imgSave.ID, new CultureInfo(_culture));
imgSave.AlternateText = _resources.GetString(imgSave.ID, new CultureInfo(_culture));
imgCancel.ToolTip = _resources.GetString(imgCancel.ID, new CultureInfo(_culture));
imgCancel.AlternateText = _resources.GetString(imgCancel.ID, new CultureInfo(_culture));
rExpComments.ErrorMessage = _resources.GetString(rExpComments.ID, new CultureInfo(_culture));
}
protected void ToggleRowSelection(object sender, EventArgs e)
{
((sender as CheckBox).NamingContainer as GridItem).Selected = (sender as CheckBox).Checked;
}
private void LoadNotes()
{
LoadSettingsNotes();
FillCheckGrid();
rExpComments.ErrorMessage = _resources.GetString(rExpComments.ID, new CultureInfo(_culture));
GridDataItem[] selectedItems = (GridDataItem[])Session["SelectedRows"];
if (selectedItems.Length == 0) return;
foreach (var selectedItem in selectedItems)
{
Hashtable newValues = new Hashtable();
selectedItem.ExtractValues(newValues);
Session["ID"] = Convert.ToInt16(newValues["Id"]);
NotesRepeater.DataSource = _organization.GetNotes(Convert.ToInt16(newValues["Id"]));
NotesRepeater.DataBind();
}
FileNotesPane.Visible = true;
PaneZone.DockedPaneId = FileNotesPane.ID;
PaneZone.ExpandedPaneId = FileNotesPane.ID;
}
private void LoadProperties()
{
LoadSettingsProperties();
GridDataItem[] selectedItems = (GridDataItem[]) Session["SelectedRows"];
if (selectedItems == null) return;
if (selectedItems.Length == 0) return;
Table tbProperty = new Table();
FillCheckGrid();
List<smDocumentTypeField> documentTypeFieldList = _organization.GetDocumentTypeField(1);
foreach (var smDocumentTypeField in documentTypeFieldList)
{
TableRow row = new TableRow();
TableCell cell = new TableCell();
Label lbl = new Label { Text = smDocumentTypeField.Name + ":" };
cell.CssClass = "LabelCol";
cell.Controls.Add(lbl);
row.Cells.Add(cell);
foreach (GridDataItem item in selectedItems)
{
Hashtable newValues = new Hashtable();
item.ExtractValues(newValues);
if (newValues[smDocumentTypeField.Name] != null && newValues[smDocumentTypeField.Name].ToString().Length > 30)
{
newValues[smDocumentTypeField.Name] = newValues[smDocumentTypeField.Name].ToString().Substring(
0, 30) + "...";
}
cell = new TableCell();
lbl = new Label { Text = newValues[smDocumentTypeField.Name] == null ? null : newValues[smDocumentTypeField.Name].ToString() };
cell.CssClass = "TextBoxCol";
cell.Controls.Add(lbl);
row.Cells.Add(cell);
}
tbProperty.Rows.Add(row);
}
PropertyList.Controls.Add(tbProperty);
Properties.Visible = true;
PaneZone.DockedPaneId = Properties.ID;
PaneZone.ExpandedPaneId = Properties.ID;
}
private void LoadSettingsProperties()
{
Properties.TabView = SplitterSlidePaneTabView.ImageOnly;
Properties.Title = _resources.GetString("TitlePropertiesPane", new CultureInfo(_culture));
Properties.UndockText =
_resources.GetString("UndockPropertiesPane", new CultureInfo(_culture));
Properties.DockText =
_resources.GetString("DockPropertiesPane", new CultureInfo(_culture));
Properties.ToolTip =
_resources.GetString("ToolTipPropertiesPane", new CultureInfo(_culture));
FileNotesPane.Visible = false;
Properties.Visible = true;
// DocPreview.Visible = true;
}
private void Preview()
{
foreach (GridDataItem selectedItem in DocumentGrid.MasterTableView.GetSelectedItems())
{
Hashtable newValues = new Hashtable();
selectedItem.ExtractValues(newValues);
String fileName = newValues["FileName"].ToString();
String path = newValues["Path"].ToString();
string[] extension = fileName.Split('.');
switch (extension[1].ToString().ToLower())
{
case "txt":
StreamReader oStreamReader = File.OpenText(path);
string contents = oStreamReader.ReadToEnd();
preview.InnerHtml = contents;
oStreamReader.Close();
break;
case "pdf":
preview.InnerHtml =
"<iframe src=\"../TempFolder/" + fileName + "\" style=\"width:718px; height:700px;\" frameborder=\"0\"></iframe>";
break;
default:
preview.InnerHtml = "<b>Preview not available<b>";
break;
}
PaneZone.ExpandedPaneId = DocPreview.ID;
PaneZone.DockedPaneId = DocPreview.ID;
searchPane.Width = Unit.Empty;
// searchPane.Width = Unit.Pixel(20);
}
}
public void ExecuteAction(string action)
{
switch (action)
{
case "delete":
if (DocumentGrid.MasterTableView.GetSelectedItems().Length <= 0)
{
// RadAjaxManager1.Alert("Select Document to delete");
}
else
{
Hashtable newValues;
DataTable dt = (DataTable)Session["grid"];
DataTable dataTable = dt.Copy();
foreach (GridDataItem selectedItem in DocumentGrid.MasterTableView.GetSelectedItems())
{
newValues = new Hashtable();
selectedItem.OwnerTableView.ExtractValuesFromItem(newValues, selectedItem);
foreach (DataRow row in dt.Rows)
{
if (row["id"].ToString() == newValues["id"].ToString())
{
DataRow deleteRow = dataTable.Rows.Find(row["id"]);
dataTable.Rows.Remove(deleteRow);
}
}
}
dataTable.AcceptChanges();
Session["action"] = "1";
Session["grid"] = dataTable;
DocumentGrid.DataSource = dataTable;
DocumentGrid.DataBind();
}
break;
case "zip":
break;
}
}
public void FillCheckGrid()
{
GridDataItem[] selectedItems = (GridDataItem[])Session["SelectedRows"];
if (selectedItems == null) return;
if (selectedItems.Length == 0) return;
foreach (var selectedItem in selectedItems)
{
Hashtable newValues = new Hashtable();
selectedItem.ExtractValues(newValues);
foreach (GridDataItem row in DocumentGrid.MasterTableView.Items)
{
if (row["Id"].Text == newValues["Id"].ToString())
{
row.Selected = true;
}
}
}
}
#endregion
}
}
public class MyTemplate : ITemplate
{
protected Image ImageIcon;
private readonly string ColName;
public MyTemplate(string cName)
{
ColName = cName;
}
public void InstantiateIn(System.Web.UI.Control container)
{
ImageIcon = new Image();
ImageIcon.ID = "ImageIcon";
ImageIcon.DataBinding += new EventHandler(ImageIcon_DataBinding);
container.Controls.Add(ImageIcon);
}
public void ImageIcon_DataBinding(object sender, EventArgs e)
{
Image iconFileType = (Image)sender;
GridDataItem container = (GridDataItem)iconFileType.NamingContainer;
iconFileType.ImageUrl = ((DataRowView)container.DataItem)[ColName].ToString() ;
}
}
<%@ MasterType VirtualPath="~/UI/Doculex.Master" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<telerik:RadAjaxPanel runat="server" EnableViewState="true" EnableEmbeddedScripts="true" EnableAJAX= "false" >
<div class="headerPage">
<asp:Label ID="lblTitle" runat="server"></asp:Label>
</div>
<div class="containerSub" id ="containerSub" runat="server">
<telerik:RadSplitter ID ="Splitter" Width = "100%" Height ="100%" Orientation="Vertical" runat="server">
<telerik:RadPane runat="server" ID="gridPane" Scrolling="None" Height="80%" Width="100%">
<telerik:RadGrid ID="DocumentGrid" runat="server"
AllowPaging="True" AllowSorting="True"
AllowFilteringByColumn="true"
CellSpacing="0" Height="500px"
EnableHeaderContextMenu ="true" EnableHeaderContextFilterMenu="true"
GridLines="None" AllowMultiRowSelection="true"
PageSize="12" AutoGenerateColumns="false" Width="100%"
EnableLinqExpressions="false" EnableViewState="True"
onneeddatasource="DocumentGrid_NeedDataSource"
onprerender="DocumentGrid_PreRender"
onitemcommand="DocumentGrid_ItemCommand" >
<ItemStyle VerticalAlign="Top" />
<GroupingSettings CaseSensitive="false" />
<MasterTableView CommandItemDisplay="None" DataKeyNames="Id"
TableLayout="Auto" PagerStyle-Mode="NumericPages" >
<Columns>
<telerik:GridClientSelectColumn CommandName="Select" UniqueName="Select"></telerik:GridClientSelectColumn>
</Columns>
</MasterTableView>
<ClientSettings Scrolling-SaveScrollPosition="true" EnablePostBackOnRowClick="true" Scrolling-AllowScroll="true" ActiveRowIndex="true" AllowColumnsReorder="true" AllowColumnHide="true">
<Selecting AllowRowSelect="true" />
<ClientEvents OnColumnHidden="ColumnHiding" />
<Resizing AllowColumnResize="true"></Resizing>
</ClientSettings>
</telerik:RadGrid>
</telerik:RadPane>
<telerik:RadPane ID="searchPane" Width="20px" runat="server" Scrolling="None" Height="350px" >
<telerik:RadSlidingZone runat="server" ID="PaneZone" SlideDirection="Left" >
<telerik:RadSlidingPane ID="DocPreview" runat="server" Width="300px" OnClientDocked = "PaneDockDocPreview"
OnClientUndocked = "PaneUnDockDocPreview">
<div Id="preview" runat="server"></div>
</telerik:RadSlidingPane>
<telerik:RadSlidingPane ID="Properties" runat="server" Width="300px" OnClientDocked = "PaneDockProperties"
OnClientUndocked = "PaneUnDockProperties" IconUrl="~/UI/Images/properties.png">
<div id="PropertyList" style="margin-top:5%" runat="server" visible="true">
</div>
</telerik:RadSlidingPane>
<telerik:RadSlidingPane Scrolling="Y" ID="FileNotesPane" runat="server" Width="300px" OnClientDocked = "PaneDockNotes"
OnClientUndocked = "PaneUnDockNotes" IconUrl="~/UI/Images/note.png" visible="false">
<div id="Div1" style="margin-top:5%; width:100%" runat="server">
<asp:LinkButton ID="lnkAddComment" runat="server" onclick="lnkAddComment_Click" >
<asp:ImageButton ID="imgAdd" runat="server" ImageUrl="~/UI/Images/add.png" />
<asp:Label ID="lblAddComment" runat="server" /></asp:LinkButton> </div><div class="clear"></div>
<asp:Panel ID="pnlComment" Visible="false" runat="server">
<table style="width:100%">
<tr>
<td><asp:Label ID="lblComent" runat="server"></asp:Label></td><td></td></tr>
<tr>
<td ><asp:TextBox TextMode="MultiLine" CssClass="commentsWithScroll" Wrap="true" ID="txtComents" runat="server"></asp:TextBox>
<telerik:RadSpell ID="spellComments" Runat="server" ControlToCheck="txtComents" />
<asp:RequiredFieldValidator ID="rfvComment" runat="server" ControlToValidate="txtComents" Display="Dynamic" ErrorMessage="*" CssClass="validator" />
<asp:RegularExpressionValidator ID="rExpComments" runat="server" ControlToValidate="txtComents" CssClass="validator"
Display="Dynamic" ValidationExpression="^([\S\s]{1,280})$"></asp:RegularExpressionValidator> </td>
<td style="text-align:right"><asp:ImageButton ID="imgSave" runat="server" OnClick="imgSave_Click" ImageUrl="~/UI/Images/add.png" />
<asp:ImageButton ID="imgCancel" runat="server" ImageUrl="~/UI/Images/cancel.png" OnClick="imgCancel_Click" /></td>
</tr></table>
<div class="clear"></div>
</asp:Panel><asp:Repeater ID="NotesRepeater" runat="server">
<ItemTemplate>
<div class="note">
<div class="dateNote">
<%# Eval("Date") %>
</div>
<div class="ownerNote">
<%# Eval("OwnerComment")%>
</h3>
<div class="commentNote">
<%# Eval("Comments")%>
</div>
</div>
<div class="clear"></div>
</ItemTemplate>
</asp:Repeater>
</telerik:RadSlidingPane>
</telerik:RadSlidingZone>
</telerik:RadPane>
</telerik:RadSplitter>
</div>
</telerik:RadAjaxPanel>
</asp:Content>
ASPX.Cs using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.IO;
using System.Resources;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using WebSearch.Components;
using WebSearch.SecurityModel;
using WebSearch.UI.Model;
using WebSearch.UI.Model.Items.Grid;
using WebSearch.UI.Model.Screen;
namespace WebSearch.UI
{
public partial class DocumentsList : System.Web.UI.Page
{
#region Properties
private string _culture;
private ResourceManager _resources;
private readonly smOrganization _organization= new smOrganization();
private List<string> hideColum = new List<string>();
#endregion
#region Events
protected void Page_Load(object sender, EventArgs e)
{
GetInfo();
if (Page.IsPostBack)
{
App.SavePreferencesGrid(DocumentGrid);
App.SavePane();
if(DocumentGrid.MasterTableView.GetSelectedItems().Length ==0)
{
Session["SelectedRows"] = null;
if (Request.QueryString["A"] == "pop" || Request.QueryString["A"] == "note")
{
Response.Redirect("~/UI/DocumentsList.aspx");
}
}
}
if (!Page.IsPostBack)
{
LoadSettings();
App.LoadPreferencesGrid(DocumentGrid);
App.LoadPane(PaneZone);
LoadCorrectAction();
}
DocumentGrid.HeaderContextMenu.ItemCreated += new RadMenuEventHandler(HeaderContextMenu_ItemCreated);
}
protected void Page_Init(object sender, EventArgs e)
{
CreateColumns();
}
void HeaderContextMenu_ItemCreated(object sender, RadMenuEventArgs e)
{
CommonFunctions.HideColumns(sender, e);
CommonFunctions.HideSpecialColumns("Select", e.Item);
CommonFunctions.HideSpecialColumns("Id", e.Item);
CommonFunctions.HideSpecialColumns("Path", e.Item);
CommonFunctions.HideSpecialColumns("FileName", e.Item);
}
protected void lnkAddComment_Click(object sender, EventArgs e)
{
pnlComment.Visible = true;
txtComents.Text = null;
lnkAddComment.Visible = false;
}
protected void DocumentGrid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
DocumentGrid.DataSource = GenericGrid.ListDocuments;
}
protected void DocumentGrid_PreRender(object sender, EventArgs e)
{
DocumentGrid.MasterTableView.GetColumnSafe("RowIndicator").Display = false;
DocumentGrid.MasterTableView.GetColumnSafe("Id").Display = false;
DocumentGrid.MasterTableView.GetColumnSafe("Path").Display = false;
if (hideColum.Count > 0)
{
foreach (string col in hideColum)
{
DocumentGrid.MasterTableView.GetColumnSafe(col).Display = false;
}
}
CommonFunctions.GridOptions(DocumentGrid);
}
protected void imgSave_Click(object sender, ImageClickEventArgs e)
{
if (!Page.IsValid) return;
string comment = txtComents.Text.Trim();
_organization.FileNotes = new smFileNotes
{
Comments = comment,
UserId = App.CurrentUserId(),
FileId = Convert.ToInt16(Session["ID"].ToString()),
Date = DateTime.Now,
};
_organization.CreateNote();
pnlComment.Visible = false;
LoadNotes();
lnkAddComment.Visible = true;
}
protected void imgCancel_Click(object sender, ImageClickEventArgs e)
{
txtComents.Text = null;
pnlComment.Visible = false;
lnkAddComment.Visible = true;
}
protected void DocumentGrid_ItemCommand(object sender, GridCommandEventArgs e)
{
switch (e.CommandName)
{
case "RowClick":
Session["SelectedRows"] = null;
Properties.Visible = false;
FileNotesPane.Visible = false;
if (DocumentGrid.MasterTableView.GetSelectedItems().Length == 0)
{
preview.InnerHtml = null;
PaneZone.DockedPaneId = null;
PaneZone.ExpandedPaneId = null;
gridPane.Width = Unit.Empty;
searchPane.Width = Unit.Pixel(20);
return;
}
if (DocumentGrid.MasterTableView.GetSelectedItems().Length == 1)
{
Preview();
Session["SelectedRows"] = DocumentGrid.MasterTableView.GetSelectedItems();
Session["tab"] = Convert.ToString((int)Doculex.Tabs.ActiveDocument);
}
if (DocumentGrid.MasterTableView.GetSelectedItems().Length > 1)
{
Session["SelectedRows"] = DocumentGrid.MasterTableView.GetSelectedItems();
Session["tab"] = Convert.ToString((int)Doculex.Tabs.MultipleDocument);
PaneZone.ExpandedPaneId = "";
PaneZone.DockedPaneId = "";
FileNotesPane.Visible = false;
Properties.Visible = false;
}
((HtmlGenericControl)Master.FindControl("header")).Controls.Clear();
if (Session["container"] != null)
{
UIContainer _container = (UIContainer)Session["container"];
MenuScreen _menu = new MenuScreen(Convert.ToInt16(Session["tab"]));
Session["menu"] = _menu;
_container.Menu = (MenuScreen)Session["menu"];
((HtmlGenericControl)Master.FindControl("header")).Controls.Add(_container.RenderHeader());
}
break;
}
}
#endregion
#region Methods
private void LoadCorrectAction()
{
if (Request.QueryString["A"] == "prop")
{
LoadProperties();
}
if (Request.QueryString["A"] == "note")
{
LoadNotes();
}
}
private void CreateColumns()
{
List<smDocumentTypeField> documentTypeFieldList = _organization.GetDocumentTypeField(1);
GridBoundColumn boundColumnId = new GridBoundColumn();
DocumentGrid.MasterTableView.Columns.Add(boundColumnId);
boundColumnId.DataField = "Id";
boundColumnId.UniqueName = "Id";
boundColumnId.Visible = false;
boundColumnId.HeaderStyle.Width = Unit.Pixel(1);
boundColumnId.ItemStyle.Width = Unit.Pixel(1);
boundColumnId = new GridBoundColumn();
DocumentGrid.MasterTableView.Columns.Add(boundColumnId);
boundColumnId.DataField = "Path";
boundColumnId.UniqueName = "Path";
boundColumnId.Visible = false;
GridImageColumn imgeColum = new GridImageColumn();
DocumentGrid.MasterTableView.Columns.Add(imgeColum);
imgeColum.DataImageUrlFields = new string[] { "Image" };
imgeColum.HeaderText = "File Type";
imgeColum.DataImageUrlFormatString = "~/UI/Images/{0}";
imgeColum.ImageAlign = ImageAlign.Middle;
imgeColum.AllowFiltering = false;
imgeColum.UniqueName = "Image";
foreach (smDocumentTypeField documentTypeField in documentTypeFieldList)
{
GridBoundColumn boundColumn = new GridBoundColumn();
DocumentGrid.MasterTableView.Columns.Add(boundColumn);
boundColumn.DataField = documentTypeField.Name;
boundColumn.HeaderText = documentTypeField.Header;
boundColumn.UniqueName = documentTypeField.Name;
boundColumn.Visible = documentTypeField.IsVisible;
if (documentTypeField.IsVisible == false)
{
hideColum.Add(documentTypeField.Name);
}
}
}
private void GetInfo()
{
_culture = App.CurrentCulture();
_resources = App.GetMasterResources("DocumentsList");
}
private void LoadSettings()
{
lblTitle.Text = _resources.GetString(lblTitle.ID, new CultureInfo(_culture));
DocPreview.IconUrl = VirtualPathUtility.ToAbsolute("~/UI/Images/preview.png");
DocPreview.TabView = SplitterSlidePaneTabView.ImageOnly;
DocPreview.Title = _resources.GetString("TitleViewPane", new CultureInfo(_culture));
DocPreview.UndockText =
_resources.GetString("UndockViewPane", new CultureInfo(_culture));
DocPreview.DockText =
_resources.GetString("DockViewPane", new CultureInfo(_culture));
DocPreview.ToolTip =
_resources.GetString("ToolTipViewPane", new CultureInfo(_culture));
PaneZone.Style.Add("position", "static");
Properties.Visible = false;
FileNotesPane.Visible = false;
// DocPreview.Visible = false;
}
private void LoadSettingsNotes()
{
//spellComments.Language = _culture;
//spellComments.DictionaryLanguage = _culture;
FileNotesPane.TabView = SplitterSlidePaneTabView.ImageOnly;
FileNotesPane.Title = _resources.GetString("TitleNotesPane", new CultureInfo(_culture));
Properties.UndockText =
_resources.GetString("UndockNotesPane", new CultureInfo(_culture));
FileNotesPane.DockText =
_resources.GetString("DockNotesPane", new CultureInfo(_culture));
FileNotesPane.ToolTip =
_resources.GetString("ToolTipNotesPane", new CultureInfo(_culture));
FileNotesPane.Visible = true;
Properties.Visible = false;
// DocPreview.Visible = true;
ImageButton imgSave = (pnlComment.FindControl("imgSave") as ImageButton);
ImageButton imgCancel = (pnlComment.FindControl("imgCancel") as ImageButton);
RegularExpressionValidator rExpComments = (pnlComment.FindControl("rExpComments") as RegularExpressionValidator);
lblAddComment.Text = _resources.GetString(lblAddComment.ID, new CultureInfo(_culture));
imgSave.ToolTip = _resources.GetString(imgSave.ID, new CultureInfo(_culture));
imgSave.AlternateText = _resources.GetString(imgSave.ID, new CultureInfo(_culture));
imgCancel.ToolTip = _resources.GetString(imgCancel.ID, new CultureInfo(_culture));
imgCancel.AlternateText = _resources.GetString(imgCancel.ID, new CultureInfo(_culture));
rExpComments.ErrorMessage = _resources.GetString(rExpComments.ID, new CultureInfo(_culture));
}
protected void ToggleRowSelection(object sender, EventArgs e)
{
((sender as CheckBox).NamingContainer as GridItem).Selected = (sender as CheckBox).Checked;
}
private void LoadNotes()
{
LoadSettingsNotes();
FillCheckGrid();
rExpComments.ErrorMessage = _resources.GetString(rExpComments.ID, new CultureInfo(_culture));
GridDataItem[] selectedItems = (GridDataItem[])Session["SelectedRows"];
if (selectedItems.Length == 0) return;
foreach (var selectedItem in selectedItems)
{
Hashtable newValues = new Hashtable();
selectedItem.ExtractValues(newValues);
Session["ID"] = Convert.ToInt16(newValues["Id"]);
NotesRepeater.DataSource = _organization.GetNotes(Convert.ToInt16(newValues["Id"]));
NotesRepeater.DataBind();
}
FileNotesPane.Visible = true;
PaneZone.DockedPaneId = FileNotesPane.ID;
PaneZone.ExpandedPaneId = FileNotesPane.ID;
}
private void LoadProperties()
{
LoadSettingsProperties();
GridDataItem[] selectedItems = (GridDataItem[]) Session["SelectedRows"];
if (selectedItems == null) return;
if (selectedItems.Length == 0) return;
Table tbProperty = new Table();
FillCheckGrid();
List<smDocumentTypeField> documentTypeFieldList = _organization.GetDocumentTypeField(1);
foreach (var smDocumentTypeField in documentTypeFieldList)
{
TableRow row = new TableRow();
TableCell cell = new TableCell();
Label lbl = new Label { Text = smDocumentTypeField.Name + ":" };
cell.CssClass = "LabelCol";
cell.Controls.Add(lbl);
row.Cells.Add(cell);
foreach (GridDataItem item in selectedItems)
{
Hashtable newValues = new Hashtable();
item.ExtractValues(newValues);
if (newValues[smDocumentTypeField.Name] != null && newValues[smDocumentTypeField.Name].ToString().Length > 30)
{
newValues[smDocumentTypeField.Name] = newValues[smDocumentTypeField.Name].ToString().Substring(
0, 30) + "...";
}
cell = new TableCell();
lbl = new Label { Text = newValues[smDocumentTypeField.Name] == null ? null : newValues[smDocumentTypeField.Name].ToString() };
cell.CssClass = "TextBoxCol";
cell.Controls.Add(lbl);
row.Cells.Add(cell);
}
tbProperty.Rows.Add(row);
}
PropertyList.Controls.Add(tbProperty);
Properties.Visible = true;
PaneZone.DockedPaneId = Properties.ID;
PaneZone.ExpandedPaneId = Properties.ID;
}
private void LoadSettingsProperties()
{
Properties.TabView = SplitterSlidePaneTabView.ImageOnly;
Properties.Title = _resources.GetString("TitlePropertiesPane", new CultureInfo(_culture));
Properties.UndockText =
_resources.GetString("UndockPropertiesPane", new CultureInfo(_culture));
Properties.DockText =
_resources.GetString("DockPropertiesPane", new CultureInfo(_culture));
Properties.ToolTip =
_resources.GetString("ToolTipPropertiesPane", new CultureInfo(_culture));
FileNotesPane.Visible = false;
Properties.Visible = true;
// DocPreview.Visible = true;
}
private void Preview()
{
foreach (GridDataItem selectedItem in DocumentGrid.MasterTableView.GetSelectedItems())
{
Hashtable newValues = new Hashtable();
selectedItem.ExtractValues(newValues);
String fileName = newValues["FileName"].ToString();
String path = newValues["Path"].ToString();
string[] extension = fileName.Split('.');
switch (extension[1].ToString().ToLower())
{
case "txt":
StreamReader oStreamReader = File.OpenText(path);
string contents = oStreamReader.ReadToEnd();
preview.InnerHtml = contents;
oStreamReader.Close();
break;
case "pdf":
preview.InnerHtml =
"<iframe src=\"../TempFolder/" + fileName + "\" style=\"width:718px; height:700px;\" frameborder=\"0\"></iframe>";
break;
default:
preview.InnerHtml = "<b>Preview not available<b>";
break;
}
PaneZone.ExpandedPaneId = DocPreview.ID;
PaneZone.DockedPaneId = DocPreview.ID;
searchPane.Width = Unit.Empty;
// searchPane.Width = Unit.Pixel(20);
}
}
public void ExecuteAction(string action)
{
switch (action)
{
case "delete":
if (DocumentGrid.MasterTableView.GetSelectedItems().Length <= 0)
{
// RadAjaxManager1.Alert("Select Document to delete");
}
else
{
Hashtable newValues;
DataTable dt = (DataTable)Session["grid"];
DataTable dataTable = dt.Copy();
foreach (GridDataItem selectedItem in DocumentGrid.MasterTableView.GetSelectedItems())
{
newValues = new Hashtable();
selectedItem.OwnerTableView.ExtractValuesFromItem(newValues, selectedItem);
foreach (DataRow row in dt.Rows)
{
if (row["id"].ToString() == newValues["id"].ToString())
{
DataRow deleteRow = dataTable.Rows.Find(row["id"]);
dataTable.Rows.Remove(deleteRow);
}
}
}
dataTable.AcceptChanges();
Session["action"] = "1";
Session["grid"] = dataTable;
DocumentGrid.DataSource = dataTable;
DocumentGrid.DataBind();
}
break;
case "zip":
break;
}
}
public void FillCheckGrid()
{
GridDataItem[] selectedItems = (GridDataItem[])Session["SelectedRows"];
if (selectedItems == null) return;
if (selectedItems.Length == 0) return;
foreach (var selectedItem in selectedItems)
{
Hashtable newValues = new Hashtable();
selectedItem.ExtractValues(newValues);
foreach (GridDataItem row in DocumentGrid.MasterTableView.Items)
{
if (row["Id"].Text == newValues["Id"].ToString())
{
row.Selected = true;
}
}
}
}
#endregion
}
}
public class MyTemplate : ITemplate
{
protected Image ImageIcon;
private readonly string ColName;
public MyTemplate(string cName)
{
ColName = cName;
}
public void InstantiateIn(System.Web.UI.Control container)
{
ImageIcon = new Image();
ImageIcon.ID = "ImageIcon";
ImageIcon.DataBinding += new EventHandler(ImageIcon_DataBinding);
container.Controls.Add(ImageIcon);
}
public void ImageIcon_DataBinding(object sender, EventArgs e)
{
Image iconFileType = (Image)sender;
GridDataItem container = (GridDataItem)iconFileType.NamingContainer;
iconFileType.ImageUrl = ((DataRowView)container.DataItem)[ColName].ToString() ;
}
}