Monday, 30 December 2013

Extract single row of a table separated by comma

DECLARE @XYList varchar(MAX)
SET @XYList = ''

SELECT @XYList = @XYList + CONVERT(varchar, X) + ',' + CONVERT(varchar, Y) + ','
FROM POINTS

-- Remove last comma
SELECT LEFT(@XYList, LEN(@XYList) - 1)

Concatenate multiple rows to single having similar group

SELECT
    Id,Name,
    Stuff(
    (SELECT '/' + State
       FROM Table_3 t2
        WHERE t2.Id=t1.Id and t2.Name=t1.Name
        FOR XML PATH(''),type).value('.','nvarchar(max)'), 1, 1, '') AS Class
FROM
    Table_3 t1
GROUP BY Id,Name

Use Column alias in Where Condition

select row_number() over (order by (select(1))) as SNo,* from (select SM.ADMNNO,           
               convert(varchar(13),SM.ADMNDATE,103) as ADMNDATE,SM.STDFIRSTNAME,             
               Convert(varchar(13),SM.DOB,103) as DOB, SM.F_MOBILE,SM.F_NAME,             
               SM.PRESENT_CLASS,SM.PRESENT_SEC,SM.ACTIVE,SM.FranchiseCode,SM.StudentRegNo,           
               (sum(SM.FeeOpeningBal)+sum(SL.Debit)-sum(SL.Credit)) AS Balance ,           
               convert(varchar(15),(sum(SM.FeeOpeningBal)+sum(SL.Debit)-sum(SL.Credit))) as BalanceS           
               from STUDENTMASTER SM Inner Join StudentLedger SL           
               on SM.ADMNNO=SL.ADMNNO AND SM.FranchiseCode=SL.FranchiseCode           
               where SM.FranchiseCode='DL') DerivedTable where Balance<>0

Saturday, 21 December 2013

column name of a table separated by comma in sqlserver

DECLARE @TABLE_NAME VARCHAR(128)
DECLARE @SCHEMA_NAME VARCHAR(128)

-----------------------------------------------------------------------
-- *** User Customisation

-- Set up the name of the table here :
SET @TABLE_NAME = 'tmp_SupplierMaster'
-- Set up the name of the schema here, or just leave set to 'dbo' :
SET @SCHEMA_NAME = 'dbo'
--SET @SCHEMA_NAME = 'damsdata'

-----------------------------------------------------------------------

DECLARE @vvc_ColumnName VARCHAR(128)
DECLARE @vvc_ColumnList VARCHAR(MAX)

IF @SCHEMA_NAME =''
  BEGIN
  PRINT 'Error : No schema defined!'
  RETURN
  END

IF NOT EXISTS (SELECT * FROM sys.tables T JOIN sys.schemas S
          ON T.schema_id=S.schema_id
          WHERE T.Name=@TABLE_NAME AND S.name=@SCHEMA_NAME)
  BEGIN
  PRINT 'Error : The table '''+@TABLE_NAME+''' in schema '''+
        @SCHEMA_NAME+''' does not exist in this database!'
  RETURN
  END

DECLARE TableCursor CURSOR FAST_FORWARD FOR
SELECT   CASE WHEN PATINDEX('% %',C.name) > 0
         THEN '['+ C.name +']'
         ELSE C.name
         END
FROM     sys.columns C
JOIN     sys.tables T
ON       C.object_id  = T.object_id
JOIN     sys.schemas S
ON       S.schema_id  = T.schema_id
WHERE    T.name    = @TABLE_NAME
AND      S.name    = @SCHEMA_NAME
ORDER BY column_id


SET @vvc_ColumnList=''

OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @vvc_ColumnName

WHILE @@FETCH_STATUS=0
  BEGIN
  SET @vvc_ColumnList = @vvc_ColumnList + @vvc_ColumnName

  -- get the details of the next column
  FETCH NEXT FROM TableCursor INTO @vvc_ColumnName

  -- add a comma if we are not at the end of the row
  IF @@FETCH_STATUS=0
    SET @vvc_ColumnList = @vvc_ColumnList + ','
  END

CLOSE TableCursor
DEALLOCATE TableCursor

PRINT 'Here is the comma separated list of column names :'
PRINT '--------------------------------------------------'
PRINT @vvc_ColumnList

Sql Various Testing (Procedure,Cursor)

CREATE Procedure [damsdata].[sp_AutoImport_Final]                  
as                     
begin                     
Declare @FCode varchar(20),       
@Main_Table varchar(50),       
@Temp_Table varchar(50),       
@FromDate varchar(50),       
@ToDate varchar(50),       
@Offline_Sync_Date varchar(50),       
@DateRange varchar(50),       
@Condition varchar(50),       
@ChildTable int,       
@RelatedTab_Name varchar(50),       
@RelatedTab_TempName varchar(50),       
@Related_Condition varchar(50),       
@ChildID varchar(max),       
@nsql NVARCHAR(max),       
@Data int,       
@parm1 int,       
@SyncType varchar(20),   
@Parent_Columns NVARCHAR(max),   
@Child_Columns NVARCHAR(max), 
@Related_Column_Id varchar(MAX)       
set @SyncType='Auto'      
if OBJECT_ID('tempdb..#Upload_Status') is not null       
drop table #Upload_Status       
select * into #Upload_Status from DataImport where WebUpdate=0      
       
set @FromDate=(select CONVERT(VARCHAR(30),FromDate,101)from DataImport)       
set @ToDate=(select CONVERT(VARCHAR(30),ToDate,101) from DataImport)       
set @Offline_Sync_Date=(select CONVERT(VARCHAR(30),AsOnDate,101) from DataImport)       
       
Declare C1 Cursor for select FranchiseCode from #Upload_Status       
open C1       
fetch next from C1 into @FCode       
while(@@FETCH_STATUS=0)       
begin       
       
Declare InnerCursor Cursor for select Main_Table,Temp_Table,DateRange_Column,Condition_Column,Has_Child_Table,Related_Table,Related_Temp_Table,Related_Column,Parent_Columns,Child_Columns from DataMapping       
open InnerCursor       
fetch next FROM InnerCursor into @Main_Table,@Temp_Table,@DateRange,@Condition,@ChildTable,@RelatedTab_Name,@RelatedTab_TempName,@Related_Condition,@Parent_Columns,@Child_Columns       
while(@@FETCH_STATUS=0)       
begin       
declare @Sqlstr varchar(MAX),       
@ChildSqlstr varchar(MAX),       
@InnerChildSqlstr varchar(MAX),       
@SyncReport varchar(max)       
--check the data within the date range in temp table.       
--If Exist then delete the records from Main table and insert records from temp table to main table       
if(@DateRange='No')       
begin       
set @nsql='select @parm1 = COUNT(*)from '+@Temp_Table+' where '+@Condition+' in ('''+@FCode+''')'        
end       
else       
begin       
set @nsql='select @parm1 = COUNT(*)from '+@Temp_Table+' where '+@Condition+' in ('''+@FCode+''') and '+@DateRange+' between '''+@FromDate+''' and '''+@ToDate+''''        
end       
exec sp_executesql @nsql, @params = N'@parm1 int OUTPUT', @parm1 = @parm1 OUTPUT        
set @Data=(SELECT @parm1 AS newCount)       
if(@Data>0)       
       
begin       
       
if(@ChildTable>0)--Check Wheather the Table has some Related Table with it.       
begin       
if OBJECT_ID('tempdb..#GetDataFromMainTable') is not null       
drop table #GetDataFromMainTable     
create table #GetDataFromMainTable (entryNo varchar(max))       
     
--set @ChildSqlstr='select '+@Related_Condition+' into #GetDataFromMainTable from '+@Temp_Table+' where '+@Condition+' in ('''+@FCode+''') and '+@DateRange+' between '''+@FromDate+''' and '''+@ToDate+''''        
--exec(@ChildSqlstr)     
--Select all foreign key Id into temp table   
set  @Related_Column_Id=''    
INSERT INTO #GetDataFromMainTable EXEC('exec sp_childParent '+@Temp_Table+','+@Related_Condition+','+@Condition+','+@FCode+','+@DateRange+','''+@FromDate+''','''+@ToDate+'''')     
 
SELECT @Related_Column_Id = @Related_Column_Id + CONVERT(varchar, entryNo) + ','  
FROM #GetDataFromMainTable 
SET @Related_Column_Id=(SELECT LEFT(@Related_Column_Id, LEN(@Related_Column_Id) - 1)) 
--Print @Related_Column_Id 
 
--declare innerChildCursor cursor for select * from #GetDataFromMainTable       
--open innerChildCursor       
--fetch next from innerChildCursor into @ChildID       
--while(@@FETCH_STATUS=0)       
--begin       
--Based on the Id delete from Child Table and then select from TEMP child table and then insert into Child Table       
set @InnerChildSqlstr='Delete from '+@RelatedTab_Name+' where '+@Related_Condition+' in ('+@Related_Column_Id+')'       
set @InnerChildSqlstr='insert into '+@RelatedTab_Name+' ('+@Child_Columns+' ) select * from  '+@RelatedTab_TempName+' where '+@Related_Condition+' in ('+@Related_Column_Id+')'       
exec(@InnerChildSqlstr)      
print @InnerChildSqlstr     
-- print @RelatedTab_TempName     
-- print @Related_Condition     
-- print @ChildID     
--fetch next from innerChildCursor into @ChildID       
--end       
--CLOSE innerChildCursor       
--DEALLOCATE innerChildCursor       
        
        
end       
if(@DateRange='No')       
begin               
SET @Sqlstr='Delete from '+@Main_Table+' where '+@Condition+' in ('''+@FCode+''');'                       
end       
else       
begin       
SET @Sqlstr='Delete from '+@Main_Table+' where '+@Condition+' in ('''+@FCode+''') and '+@DateRange+' between '''+@FromDate+''' and '''+@ToDate+''';'                       
end       
set @Sqlstr=@Sqlstr+'Insert into '+@Main_Table+' ('+@Parent_Columns+' ) select * from '+@Temp_Table+' where '+@Condition+' in ('''+@FCode+''');'                   
print @Sqlstr   
exec(@Sqlstr)       
       
end       
fetch next FROM InnerCursor into @Main_Table,@Temp_Table,@DateRange,@Condition,@ChildTable,@RelatedTab_Name,@RelatedTab_TempName,@Related_Condition,@Parent_Columns,@Child_Columns       
end       
close InnerCursor       
deallocate InnerCursor       
       
set @SyncReport='Insert into tbl_SyncTrack values ('''+@FCode+''',GETDATE(),'''+@SyncType+''','''+@FromDate+''','''+@ToDate+''','''+@Offline_Sync_Date+''')'       
exec(@SyncReport)       
fetch next from C1 into @FCode       
end       
close C1       
deallocate C1           
end         

Wednesday, 11 December 2013

Get the value of treenode which are checked in.net

List<string> PermissionId = new List<string>();


 private string CallNodesSelector()
        {
            TreeNodeCollection nodes = this.TreeView1.Nodes;
            foreach (TreeNode n in nodes)
            {
                GetNodeRecursive(n);
            }
            List<string> distinctPermissionIds = PermissionId.Distinct().ToList();
            string PermissionIds = "1,";
            foreach (string value in distinctPermissionIds)
            {
                PermissionIds += value + ",";
            }
            PermissionIds = PermissionIds.Substring(0, PermissionIds.Length - 1);
            return PermissionIds;

        }

        private void GetNodeRecursive(TreeNode treeNode)
        {
            if (treeNode.Checked == true)
            {
                if (treeNode.Parent != null)
                {
                    TreeNode NodeParent = treeNode.Parent;
                    if (NodeParent.Checked)
                    {

                    }
                    else
                    {
                        PermissionId.Add(NodeParent.Value);
                    }
                }
                string Text = treeNode.Text;
                PermissionId.Add(treeNode.Value);

            }
            foreach (TreeNode tn in treeNode.ChildNodes)
            {
                GetNodeRecursive(tn);
            }

        }

Comma separated values in sqlserver

http://blog.sqlauthority.com/2009/11/25/sql-server-comma-separated-values-csv-from-table-column/

Progressbar in c#

----http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker(v=vs.90).aspx---- 

private void btnProcess_Click(object sender, EventArgs e)
        {
            if (BackGroundWorkerPhaseI.IsBusy != true)
            {
                BackGroundWorkerPhaseI.RunWorkerAsync();
            }
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            if (BackGroundWorkerPhaseI.WorkerSupportsCancellation == true)
            {
                BackGroundWorkerPhaseI.CancelAsync();
            }
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void BackGroundWorkerPhaseI_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                for (int i = 1; (i <= 100); i++)
                {
                    if ((BackGroundWorkerPhaseI.CancellationPending == true))
                    {

                        e.Cancel = true;
                        for (int j = i; j >= 0; j--)
                        {
                            if (j == 10)
                            {
                                SqlQuery = "truncate table tbl_Complete_Teacher_Configuration";

                            }
                            if (j == 20)
                            {
                                SqlQuery = "truncate table  tbl_Complete_Teacher_Configuration; truncate table  tbl_Complete_Class_Configuration";
                            }
                            if (j == 30)
                            {
                                SqlQuery = "truncate table  tbl_Complete_Teacher_Configuration; truncate table  tbl_Complete_Class_Configuration;truncate table tbl_Configuration_master ";
                            }
                            if (j == 40)
                            {
                                SqlQuery = "truncate table  tbl_Complete_Teacher_Configuration; truncate table  tbl_Complete_Class_Configuration;truncate table tbl_Configuration_master; truncate table tbl_Allotment_Master ";

                            }
                            flag = deleteData.DeleteDataValues(SqlQuery);
                            BackGroundWorkerPhaseI.ReportProgress(j);
                        }
                        break;
                    }
                    else
                    {
                        // Wait 100 milliseconds.
                        if (i == 10)
                        {
                            SqlQuery = "sp_CreateTeacherConfigurtion";
                            flag = insertData.InsertDataValues(SqlQuery);
                        }
                        if (i == 20)
                        {
                            SqlQuery = "sp_CreateClassConfigurtion";
                            flag = insertData.InsertDataValues(SqlQuery);
                        }
                        if (i == 30)
                        {
                            SqlQuery = "sp_CreateConfigurationMaster";
                            flag = insertData.InsertDataValues(SqlQuery);
                        }
                        // Report progress.
                        if (i == 40)
                        {
                            SqlQuery = "sp_FillAlotmentsFromCombinedConditions";
                            flag = insertData.InsertDataValues(SqlQuery);
                        }
                        if (i == 50)
                        {
                            flag = ReflectCombinedConditions();
                        }
                        if (i == 60)
                        {
                          flag = GenerateAllotments();
                        }
                        //if (i == 90)
                        //{
                        //    flag = ReflectCombinedConditions();
                        //}
                        BackGroundWorkerPhaseI.ReportProgress(i);
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }

        private void BackGroundWorkerPhaseI_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {

            // Change the value of the ProgressBar to the BackgroundWorker progress.
            PhaseIProgressBar.Value = e.ProgressPercentage;
            // Set the text.
            this.Text = e.ProgressPercentage.ToString() + "%";
        }

        private void BackGroundWorkerPhaseI_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if ((e.Cancelled == true))
            {
                MessageBox.Show("Operation Aborted.!", "Time Table", MessageBoxButtons.OK, MessageBoxIcon.Error);
                PhaseIProgressBar.Value = 0;
                this.Text = "Operation Aborted";
            }

            else if (!(e.Error == null))
            {
                MessageBox.Show("Error: " + e.Error.Message, "Time Table", MessageBoxButtons.OK, MessageBoxIcon.Error);
                PhaseIProgressBar.Value = 0;
            }

            else
            {
                MessageBox.Show("PHASE-I Generation Completed.", "Time Table", MessageBoxButtons.OK, MessageBoxIcon.Information);
                PhaseIProgressBar.Value = 0;
            }
        }

Javascript function to show message before redirect

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "redirect script","alert('Invalid Login Details!'); location.href='index.html';",true);

Get the database space used in sqlserver

select
    a.FILEID,
    [FILE_SIZE_MB] =
        convert(decimal(12,2),round(a.size/128.000,2)),
    [SPACE_USED_MB] =
        convert(decimal(12,2),round(fileproperty(a.name,'SpaceUsed')/128.000,2)),
    [FREE_SPACE_MB] =
        convert(decimal(12,2),round((a.size-fileproperty(a.name,'SpaceUsed'))/128.000,2)) ,
    NAME = left(a.NAME,15),
    FILENAME = left(a.FILENAME,30)
from
    dbo.sysfiles a

Converting Columns into Rows in sqlserver

;with mycte
 as
 (
SELECT rn,cols,val
FROM   (SELECT  row_number() over(order by (select(1))) rn ,A,B,C,D,E,F,G,H,I,J
        FROM  #AsPerDateFinal) AS src1
UNPIVOT (val FOR cols
IN ( A,B,C,D,E,F,G,H,I,J)) AS unpvt
 )
 
SELECT [1] as NintyDays ,[2] as SixtyDays ,[3] as ThirtyDays,[4] as SevenDays,[5] as Today
FROM   (SELECT rn,cols,val
        FROM   mycte) AS src2 PIVOT
( Max(val) FOR rn IN ([1], [2], [3],[4],[5])) AS pvt










declare @sql1 varchar(max)
declare @sql2 varchar(max)
set @sql2=(SELECT STUFF ( ( SELECT DISTINCT  ',[' +CAST(statecd AS VARCHAR)+']' FROM M_States WHERE statecd<42 FOR XML PATH('')),1,1,'' ) )
set @sql1='SELECT '+@sql2+' FROM (SELECT STATENM,STATECD FROM M_STATES WHERE STATECD<42) AS K
PIVOT(MAX(STATENM) FOR STATECD IN ('+@sql2+')) AS P'
--SELECT @sql1
EXECUTE(@sql1)

Sql Server Various Testings

USE [dams]
GO
/****** Object:  StoredProcedure [damsdata].[sp_DashBoardAsPerDateUpdated]    Script Date: 12/11/2013 17:52:57 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [damsdata].[sp_DashBoardAsPerDateUpdated]
(
@FranchiseCode varchar(10),
@Session nvarchar(10),
@FirstDay varchar(20),
@SevenDay varchar(20),
@ThirtyDay varchar(20),
@sixtyDay varchar(20),
@NintyDay varchar(20)
)
as
begin

Declare @DayChange varchar(20),

@TotalStudentsAsPer varchar(max),
@NewStudentsAsPer varchar(max),
@CollectionAsPer decimal(20,2),

@ServiceTaxAsPer decimal(20,2),
@ChequeReturnAsPer decimal(20,2),
@FeeConcessionAsPer decimal(20,2),
@FeeRefundAsPer decimal(20,2),
@BadDebtAsPer decimal(20,2),
@SmsSentAsPer bigint,
@RunningBatchesAsPer varchar(max)

DECLARE @DateRange table (DRange varchar(20))
insert into @DateRange (DRange) values (@NintyDay),(@sixtyDay),(@ThirtyDay),(@SevenDay),(@FirstDay)

if OBJECT_ID('tempdb..#AsPerDateFinal') is not null
drop table #AsPerDateFinal

create Table #AsPerDateFinal(A varchar(max),B varchar(max),
C varchar(max),D varchar(max),E varchar(max),F varchar(max)
,G varchar(max),H varchar(max),I varchar(max),J varchar(max))

Declare C1 Cursor for select DRange from @DateRange
open C1
fetch next from C1 into @DayChange
while(@@FETCH_STATUS=0)
begin

 set @TotalStudentsAsPer=(Select Count(*) as TotalStudents FROM STUDENTMASTER WHERE FranchiseCode=@FranchiseCode and  
 ADMNDATE <  CONVERT(VARCHAR(15),@DayChange,103))

 SET @NewStudentsAsPer=(Select count(*) as NewAdmissions from STUDENTMASTER where FranchiseCode=@FranchiseCode AND Session=@Session  
 and ADMNDATE < CONVERT(VARCHAR(15),@DayChange,103))

 set @CollectionAsPer=(select SUM(CurrentPaid) AS Collection from FeeReceipt where FranchiseCode=@FranchiseCode  
 and ReceiptDate < CONVERT(VARCHAR(15),@DayChange,103))

 set @ServiceTaxAsPer=(select SUM(STax) AS ServiceTax from FeeReceipt where FranchiseCode=@FranchiseCode  
and ReceiptDate < CONVERT(VARCHAR(15),@DayChange,103))

  set @ChequeReturnAsPer=(select SUM(AMOUNT) as  ChequeReturn from CHEQUERETURN where FranchiseCode=@FranchiseCode  
and vDATE < CONVERT(VARCHAR(15),@DayChange,103))

  set @FeeConcessionAsPer=(select SUM(AMOUNT) as  FeeConcession from FeeConcession where FranchiseCode=@FranchiseCode 
 and VDATE < CONVERT(VARCHAR(15),@DayChange,103))

  set @FeeRefundAsPer=(select SUM(AMOUNT) as  FeeRefund from FeeRefund where FranchiseCode=@FranchiseCode 
 and DATE < CONVERT(VARCHAR(15),@DayChange,103))

  set @BadDebtAsPer=(select SUM(AMOUNT) as  BadDebt from BadDebt where FranchiseCode=@FranchiseCode 
 and VDATE < CONVERT(VARCHAR(15),@DayChange,103))

 set @SmsSentAsPer=(select Count(*) as  SmsSent from SMSSentHistory where FranchiseCode=@FranchiseCode 
 and MDate < CONVERT(VARCHAR(15),@DayChange,103))

 set @RunningBatchesAsPer=(select Count(*) as  RunningBatches from BatchMaster where FranchiseCode=@FranchiseCode and BatchCompleteFlag='N' 
 and StartDate < CONVERT(VARCHAR(15),@DayChange,103))


 insert into #AsPerDateFinal (A,B,C,D,E,F,G,H,I,J)
        values (@TotalStudentsAsPer,@NewStudentsAsPer,@CollectionAsPer,@ChequeReturnAsPer,
                @FeeConcessionAsPer,@FeeRefundAsPer,@BadDebtAsPer,@SmsSentAsPer,@ServiceTaxAsPer,@RunningBatchesAsPer)
       

fetch next from C1 into @DayChange
end
close C1
deallocate C1

--select * from #AsPerDateFinal


;with mycte
 as
 (
SELECT rn,cols,val
FROM   (SELECT  row_number() over(order by (select(1))) rn ,A,B,C,D,E,F,G,H,I,J
        FROM  #AsPerDateFinal) AS src1
UNPIVOT (val FOR cols
IN ( A,B,C,D,E,F,G,H,I,J)) AS unpvt
 )
 
SELECT [1] as NintyDays ,[2] as SixtyDays ,[3] as ThirtyDays,[4] as SevenDays,[5] as Today
FROM   (SELECT rn,cols,val
        FROM   mycte) AS src2 PIVOT
( Max(val) FOR rn IN ([1], [2], [3],[4],[5])) AS pvt

end

Thursday, 21 November 2013

Check and Uncheck Treenodes based on Permission

 Check Treenodes based on permission

public void CheckPermittedMenu(string MenuIds)
        {
            string[] MenuId = MenuIds.Split(',');
            TreeView1.CollapseAll();          
            foreach (TreeNode node in TreeView1.Nodes)
            {
                if (MenuId.Contains(node.Value))
                {
                    node.Checked = true;
                    CheckChildren(node, MenuId);
                }              

            }
        }

        private void CheckChildren(TreeNode rootNode,string[] MenuId)
        {
            foreach (TreeNode node in rootNode.ChildNodes)
            {
                if (MenuId.Contains(node.Value))
                {
                    node.Checked = true;
                }
                CheckChildren(node, MenuId);
                //node.Checked = true;
            }
        }




UnCheck Treenodes

 public void UncheckAllNodes()
        {
            foreach (TreeNode node in TreeView1.Nodes)
            {
                node.Checked = false;
                UnCheckChildren(node);
            }
        }

        private void UnCheckChildren(TreeNode rootNode)
        {
            foreach (TreeNode node in rootNode.ChildNodes)
            {

                node.Checked = false;
                UnCheckChildren(node);
                //node.Checked = true;
            }
        }

Select and Deselect Child Node based on ParentNode of Treeview in Javascript

On Page Load

TreeView1.Attributes.Add("onclick", "OnTreeClick(event)");








<script language="javascript" type="text/javascript">
        function OnTreeClick(evt) {
            var src = window.event != window.undefined ? window.event.srcElement : evt.target;
            var isChkBoxClick = (src.tagName.toLowerCase() == "input" && src.type == "checkbox");
            if (isChkBoxClick) {
                var parentTable = GetParentByTagName("table", src);
                var nxtSibling = parentTable.nextSibling;
                if (nxtSibling && nxtSibling.nodeType == 1)//check if nxt sibling is not null & is an element node
                {
                    if (nxtSibling.tagName.toLowerCase() == "div") //if node has children
                    {
                        //check or uncheck children at all levels
                        CheckUncheckChildren(parentTable.nextSibling, src.checked);
                    }
                }
                //check or uncheck parents at all levels
                CheckUncheckParents(src, src.checked);
            }
        }

        function CheckUncheckChildren(childContainer, check) {
            var childChkBoxes = childContainer.getElementsByTagName("input");
            var childChkBoxCount = childChkBoxes.length;
            for (var i = 0; i < childChkBoxCount; i++) {
                childChkBoxes[i].checked = check;
            }
        }

        function CheckUncheckParents(srcChild, check) {
            var parentDiv = GetParentByTagName("div", srcChild);
            var parentNodeTable = parentDiv.previousSibling;

            if (parentNodeTable) {
                var checkUncheckSwitch;

                if (check) //checkbox checked
                {
                    var isAllSiblingsChecked = AreAllSiblingsChecked(srcChild);
                    if (isAllSiblingsChecked)
                        checkUncheckSwitch = true;
                    else
                        return; //do not need to check parent if any(one or more) child not checked
                }
                else //checkbox unchecked
                {
                    checkUncheckSwitch = false;
                }

                var inpElemsInParentTable = parentNodeTable.getElementsByTagName("input");
                if (inpElemsInParentTable.length > 0) {
                    var parentNodeChkBox = inpElemsInParentTable[0];
                    parentNodeChkBox.checked = checkUncheckSwitch;
                    //do the same recursively
                    CheckUncheckParents(parentNodeChkBox, checkUncheckSwitch);
                }
            }
        }

        function AreAllSiblingsChecked(chkBox) {
            var parentDiv = GetParentByTagName("div", chkBox);
            var childCount = parentDiv.childNodes.length;
            for (var i = 0; i < childCount; i++) {
                if (parentDiv.childNodes[i].nodeType == 1) //check if the child node is an element node
                {
                    if (parentDiv.childNodes[i].tagName.toLowerCase() == "table") {
                        var prevChkBox = parentDiv.childNodes[i].getElementsByTagName("input")[0];
                        //if any of sibling nodes are not checked, return false
                        if (!prevChkBox.checked) {
                            return false;
                        }
                    }
                }
            }
            return true;
        }

        //utility function to get the container of an element by tagname
        function GetParentByTagName(parentTagName, childElementObj) {
            var parent = childElementObj.parentNode;
            while (parent.tagName.toLowerCase() != parentTagName.toLowerCase()) {
                parent = parent.parentNode;
            }
            return parent;
        }

</script>

Friday, 8 November 2013

Javascript Function to get the Checkbox Selected

<script type="text/javascript">

        function SelectAll() {
            var totalcheck = 0;
            var frm = document.forms[0];
            for (i = 0; i < frm.elements.length; i++) {
                if (frm.elements[i].type == "checkbox")
                 {
                     if (frm.elements[i].checked) {
                     
                         document.getElementById('<%=h1.ClientID %>').value=document.getElementById('<%=h1.ClientID %>').value+','+ frm.elements[i].id;
                     }

                 }

             }
             alert(document.getElementById('<%=h1.ClientID %>').value);
        }

</script>

//h1 is the HiddenField
<%@ Page Language="C#" MasterPageFile="~/Worksheet.master"  AutoEventWireup="true" CodeFile="sisStudentWorksheet.aspx.cs" Inherits="sisStudentWorksheet" Title=":: SIS - Student Worksheet" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<asp:Content ID="Content2" runat="server"  ContentPlaceHolderID="Headers">
    <script type="text/javascript" src="js/ExpandAllCollapseAll.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $(".toggle_container").hide();
        $("h2.expand_heading").toggle(function () {
            $(this).addClass("active");
        }, function () {
            $(this).removeClass("active");
        });
        $("h2.expand_heading").click(function () {
            $(this).next(".toggle_container").slideToggle("slow");
        });
        $(".expand_all").toggle(function () {
            $(this).addClass("expanded");
        }, function () {
            $(this).removeClass("expanded");
        });
        $(".expand_all").click(function () {
            $(".toggle_container").slideToggle("slow");
        });
    });
</script>
<style type="text/css">
    .Details
    {
        font-family:Verdana;
        font-size:11px;
        font-weight:bold;
    }
    .DetailsContent
    {
        font-family:Verdana;
        font-size:11px;
    }
  
</style>
<style type="text/css">
.modalBackground
{
background-color:#333333;

  filter:alpha(opacity=80);
  opacity:0.8;
}
.ModalWindow
{
  border: solid1px#c0c0c0;
  padding: 100px10px10px10px;
  position:fixed;

}
 </style>
<style type="text/css">
html {
    overflow-Y: scroll;
}
.wrapper {
    width: 600px;
    margin: 0 auto;
}
.expand_top,.expand_wrapper
{
    width: 600px;
    padding:0px;
    margin:0px 0px 5px 0px;
    float:left;
}
h1 {
    font: 4em normal Georgia, 'Times New Roman', Times, serif;
    text-align:center;
    padding: 20px 0;
    color: #ffffff;
}

h2.expand_heading {
    padding: 0 0 0 20px;
    margin: 0 0 5px 0;   
    width: 600px;   
    float: left;
}
.expand_all
{
cursor:default;
}
h2.expand_heading a {
    /*color: black;*/
    text-decoration: none;
    display: block;
}
h2.expand_heading a:hover
{
    /*color: #ccc;*/
}
h2.active {background-position: left bottom;}
.toggle_container {
    margin: 0 0 5px;
    padding: 0;
    border-top: 1px solid #d6d6d6;
    background: #ffffff;
    overflow: hidden;
    font-size: 1.2em;
    width: 600px;
    clear: both;
}
.toggle_container .box {
    padding: 5px;
}
.toggle_container .box p {
    padding: 5px 0;
    margin: 5px 0;
}
.toggle_container h3 {
    font: 2.0em normal Georgia, "Times New Roman", Times, serif;
    margin: 0 0 5px;
    padding: 0 0 5px 0;
    color:#000000;
    border-bottom: 1px dotted #ccc;
}
.toggle_container img {
    float: left;
    margin: 10px 15px 15px 0;
    padding: 5px;
    background: #ddd;
    border: 1px solid #ccc;
}
.expand_all
{
width:116px;
height:29px;
background:url(extra_buttons.png) no-repeat top left;
float:right;
cursor: pointer;
}
.expanded
{
background-position:bottom left;
}
</style>
<script type="text/javascript">
    function pageLoad() {
        $addHandler(document, 'keydown', onKeypress);     
        var mpe1 = $find("MPE1");
        mpe1.add_shown(onShown);
        var mpe2 = $find("MPE2");
        mpe2.add_shown(onShown2);
        var mpe3 = $find("MPE3");
        mpe3.add_shown(onShown3);
        var mpe4 = $find("MPE4");
        mpe4.add_shown(onShown4);
        var mpe5 = $find("MPE5");
        mpe5.add_shown(onShown5);
        var mpe6 = $find("MPE6");
        mpe6.add_shown(onShown6);
        var mpe7 = $find("MPE7");
        mpe7.add_shown(onShown7);
        var mpe8 = $find("MPE8");
        mpe8.add_shown(onShown8);
        var mpe9 = $find("MPE9");
        mpe9.add_shown(onShown9);
        var mpe10 = $find("MPE10");
        mpe10.add_shown(onShown10);
        var mpe11 = $find("MPE11");
        mpe11.add_shown(onShown11);
        var mpe12 = $find("MPE12");
        mpe12.add_shown(onShown12);
        var mpe13 = $find("MPE13");
        mpe13.add_shown(onShown13);
        var mpe14 = $find("MPE14");
        mpe14.add_shown(onShown14);
        var mpe15 = $find("MPE15");
        mpe15.add_shown(onShown15);
      
    }
    function onShown() {
        var background = $find("MPE1")._backgroundElement;
        background.onclick = function () {
            $find("MPE1").hide();
        }
    }
    function onShown2() {
        var background = $find("MPE2")._backgroundElement;
        background.onclick = function () {
            $find("MPE2").hide();
        }
    }
    function onShown3() {
        var background = $find("MPE3")._backgroundElement;
        background.onclick = function () {
            $find("MPE3").hide();
        }
    }
    function onShown4() {
        var background = $find("MPE4")._backgroundElement;
        background.onclick = function () {
            $find("MPE4").hide();
        }
    }
    function onShown5() {
        var background = $find("MPE5")._backgroundElement;
        background.onclick = function () {
            $find("MPE5").hide();
        }
    }
    function onShown6() {
        var background = $find("MPE6")._backgroundElement;
        background.onclick = function () {
            $find("MPE6").hide();
        }
    }
    function onShown7() {
        var background = $find("MPE7")._backgroundElement;
        background.onclick = function () {
            $find("MPE7").hide();
        }
    }
    function onShown8() {
        var background = $find("MPE8")._backgroundElement;
        background.onclick = function () {
            $find("MPE8").hide();
        }
    }
    function onShown9() {
        var background = $find("MPE9")._backgroundElement;
        background.onclick = function () {
            $find("MPE9").hide();
        }
    }
    function onShown10() {
        var background = $find("MPE10")._backgroundElement;
        background.onclick = function () {
            $find("MPE10").hide();
        }
    }
    function onShown11() {
        var background = $find("MPE11")._backgroundElement;
        background.onclick = function () {
            $find("MPE11").hide();
        }
    }
    function onShown12() {
        var background = $find("MPE12")._backgroundElement;
        background.onclick = function () {
            $find("MPE12").hide();
        }
    }
    function onShown13() {
        var background = $find("MPE13")._backgroundElement;
        background.onclick = function () {
            $find("MPE13").hide();
        }
    }
    function onShown14() {
        var background = $find("MPE14")._backgroundElement;
        background.onclick = function () {
            $find("MPE14").hide();
        }
    }
    function onShown15() {
        var background = $find("MPE15")._backgroundElement;
        background.onclick = function () {
            $find("MPE15").hide();
        }
    }
    function onKeypress(args) {
        if (args.keyCode == Sys.UI.Key.esc)
        {
            var mdl = $find('MPE1');
            var md2 = $find('MPE2');
            var md3 = $find('MPE3');
            var md4 = $find('MPE4');
            var md5 = $find('MPE5');
            var md6 = $find('MPE6');
            var md7 = $find('MPE7');
            var md8 = $find('MPE8');
            var md9 = $find('MPE9');
            var md10 = $find('MPE10');
            var md11 = $find('MPE11');
            var md12 = $find('MPE12');
            var md13 = $find('MPE13');
            var md14 = $find('MPE14');
            var md15 = $find('MPE15');
            if (mdl != null || md2 != null || md3 != null || md4 != null || md4 != null || md6 != null || md7 != null || md8 != null || md9 != null || md10 != null || md11 != null || md12 != null || md13 != null || md14 != null || md15 != null)
            {
                mdl.hide();
                md2.hide();
                md3.hide();
                md4.hide();
                md5.hide();
                md6.hide();
                md7.hide();
                md8.hide();
                md9.hide();
                md10.hide();
                md11.hide();
                md12.hide();
                md13.hide();
                md14.hide();
                md15.hide();

            }
        }
    }
    </script>
<style type="text/css">
.HideBackGround
{
background-color: #696969;
filter: alpha(opacity=40);
opacity: 0.7;
xindex:-1;
}
</style>
</asp:Content>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

 <table align ="center"  cellpadding="0" cellspacing="0" style=" border:1px solid #669999;" width="100%" height="100%">
<tr>
<td style="background-image: url(JupImages/tableheading2.gif); height: 25px" class="Pageheader">
<strong><span  class="TableHeader">
&nbsp; Student Worksheet / Assignments</span>
</strong>

</td>
</tr>
<tr>
<td style="height:20px;"></td>
</tr>   
<tr>
<td align="center" style="height: 10px">
<asp:Label ID="recMsgPat" runat="server" class="Details" style="color:Red "
Text="No Worksheet Information for this class" Visible="False"></asp:Label></td>
</tr>
<tr>
<td>
<div class="wrapper">
    <table id="tablesent" runat ="server">
    <tr>
    <td>      
    <div class="expand_top">
    <div class="expand_all">
    </div>
    </div>
    </td>
    </tr>   
 <tr>
    <td>
    <table width="100%" cellpadding="0" cellspacing="0" style="border:1px solid Gray">
    <tr>
    <td>
    <div style="margin-left:0px;width:630px"> 
   <table width="100%" cellpadding="0" cellspacing="0">
    <tr style="background-image: url(JupImages/tableheading2.gif); height:25px">
<td width="5%" class="Details" align="right">Sno</td> 
<td width="15%" class="Details" style="padding-left:25px">Posted On</td>
<td width="15%" class="Details" style="padding-left:20px">Posted By</td>
<td width="50%" class="Details" style="padding-left:20px">Worksheet Title</td>  
<td width="15%" class="Details" style="padding-left:50px">Open</td>   
</tr>
   </table>
   </div>
    </td>
    </tr>
    <tr>
    <td>
   <asp:Repeater id="rptWorksheet" runat="server"
            OnItemDataBound="rptWorksheet_ItemDataBound"
            onitemcommand="rptWorksheet_ItemCommand" >                                                  
<ItemTemplate>
<table width="100%" cellpadding="0" cellspacing="0">
<tr onmouseover="this.style.backgroundColor='Silver'" onmouseout="this.style.backgroundColor=''" valign="top">
<td width="90%">
 <div class="expand_wrapper">
<h2 class="expand_heading">
<a href="#">
<table width="100%">
<tr >
<td align="left"  valign="top" width="5%" style="font-family:Verdana; font-size:11px;" >
<asp:Label ID="lblsn" runat="server" Font-Bold="True" ForeColor="black"></asp:Label>
</td>  
<td align="left" width="15%" style="font-family:Verdana;font-size:10px;font-weight:bold;color:#000066">
<%#Eval("PostedDate")%>
</td>
<td align="left" width="15%" style="font-family:Verdana;font-size:10px;font-weight:bold;color:#000066">
<%#Eval("UserName")%>
</td>                                                      
<td align="left" width="50%" style="font-family:Verdana;font-size:10px;font-weight:bold;color:#000066">
<%#Eval("WorksheetTitle")%>
</td>
<td align="center" width="15%" style="font-family:Verdana;font-size:10px;font-weight:bold;color:#000066">

</td>
</tr>
</table>
</a>
</h2>
<div class="toggle_container">
    <div class="box">
    <table>
    <tr>
    <td style="padding-left:210px">
        <font style="font-family:Verdana;font-weight:bold;font-size:11px">Description :</font><br />
        <font style="font-family:Verdana;font-size:11px"><%#Eval("Description")%></font><br />
        <font style="font-family:Verdana;font-weight:bold;font-size:11px">File Name :</font>
        <asp:HyperLink ID="hpldwn" CssClass="Details" runat="server" NavigateUrl="" Text='<%# DataBinder.Eval(Container.DataItem, "worksheetfilename")%>'>
        </asp:HyperLink>
        <%--<asp:HyperLink ID="hpldwnWord" CssClass="Details" runat="server" NavigateUrl="" Text='<%# DataBinder.Eval(Container.DataItem, "worksheetfilename")%>'>></asp:HyperLink>--%>   
        <cc1:ModalPopupExtender ID="ModalPopupExtender1" runat="server"
    BackgroundCssClass="ModalBackground" CancelControlID="btnCancel" TargetControlID="hpldwn" PopupControlID="panOpen" 
    PopupDragHandleControlID="panOpen"   Enabled="false"> </cc1:ModalPopupExtender>
  
        </td>
        </tr>
        </table>
    </div>
</div>


</div>
</td>
<td width="10%">

<%--<a id="a_redirect" runat="server">--%>
<asp:ImageButton ID="img_open" runat="server" ImageUrl="~/JupImages/download.gif" CommandName="Download"/>
<%--</a>--%>

</td>
</tr>
<tr>
<td width="100%">
<asp:Panel ID="panOpen" runat="server" Height="550px" Width="800px" CssClass="ModalWindow" style="margin-top:10px;">
<table width="100%" style="height:100%;border:#000 2px solid;background-color:Gray" cellpadding="0" cellspacing="0">
<tr>
<td align="right" style="background-image: url(JupImages/tableheading2Modified.gif); height: 30px" >
<table width="100%">
<tr>
<td width="80%">
<asp:Label ID="lbl_PopUPHeader" runat="server" CssClass="Details" style="color:White"></asp:Label>
</td>
<td width="20%" align="right">
<asp:Image ID="btnCancel" runat="server" ImageUrl="~/NewImages/minus.png" />
</td>
</tr>
</table>

</td>
</tr>
<tr>
<td align="right"   >
<iframe id="Frame1" runat="server" scrolling="auto" height="550px" width="770px"></iframe>
</td>
</tr>
</table>
</asp:Panel>
</td>
</tr>
</table>    
</ItemTemplate>

</asp:Repeater>
</td>

</tr>
</table>
 </td>
    </tr>
</table>
</div>
</td>
</tr>
<tr>
<td>
<table id="tblsentfooter" runat="server" border="0" cellpadding="0" cellspacing="0"
visible="false" width="652" >
<tr>
<td align="left" height="10">
</td>
</tr>
                               
                               
<tr>
<td style="padding-left:70px">
&nbsp;&nbsp;
<asp:Button ID="btnsentrefresh" runat="server" OnClick="btnsentrefresh_Click"
Text="Refresh" CssClass="submit btn primary-btn" /></td>
</tr>
</table>
</td>
</tr>
</table>

</asp:Content>





















using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using Telerik.Web.UI;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Jupsoft.sisPortal.BO;
using Jupsoft.sisPortal.Bll;
using Jupsoft.sisPortal.Dal;
using SISBusinessObject;
using System.IO;
using AjaxControlToolkit;

public partial class sisStudentWorksheet : System.Web.UI.Page
{

    SqlConnection sconn = new SqlConnection(AppConfiguration.ConnectionString);
    clsSchoolId objclid = new clsSchoolId();
    clsWorksheetAddEditManager objclsadedit = new clsWorksheetAddEditManager();
    string PageName = "";
    clsException objException = new clsException();
    protected void Page_Load(object sender, EventArgs e)
    {
        //Frame1.Attributes["src"] = "modal.aspx";
        PageName = objException.GetCurrentPageName();
        try
        {
            DataSet dsStnd = new DataSet();
            DataSet dsClassid = new DataSet();
            string uid = Convert.ToString(Session["msguserid"]);
            dsStnd = objclid.selectstandard(uid, Session["SchoolId"].ToString());
            if (dsStnd.Tables[0].Rows.Count < 0)
            {
                Response.Redirect("ErrorMessagePage.aspx");
            }
            else if (dsStnd.Tables[0].Rows.Count > 0)
            {

                string strstand = Convert.ToString(dsStnd.Tables[0].Rows[0][0]);
                //strstand = strstand.ToLower();
                dsClassid = objclid.selectclassidfromstandard(strstand, Session["SchoolId"].ToString());
                int classid = Convert.ToInt16(dsClassid.Tables[0].Rows[0][0]);
                Session["cid"] = classid;
            }
            if (!IsPostBack)
            {
                bindgridview();
            }
        }
        catch (Exception ex)
        {
            //objException.keepExceptionDetails(PageName, "Page_Load()", ex.Message);
            // Response.Redirect("SisError.aspx");
        }
    }
    public DataTable bindgridview()
    {
        DataTable dt = new DataTable();
        try
        {
            string scid = Convert.ToString(Session["SchoolId"]);
            dt = objclid.ShowDataFromWorksheet(scid, Convert.ToInt16(Session["cid"]), Convert.ToString(Session["Section"]));
            if (dt.Rows.Count <= 0)
            {
                recMsgPat.Visible = true;
                recMsgPat.Text = "No Worksheet Found For This Class";
                tablesent.Visible = false;
                tblsentfooter.Visible = false;
            }
            else
            {
                tblsentfooter.Visible = true;
                tablesent.Visible = true;
                rptWorksheet.DataSource = dt;
                rptWorksheet.DataBind();

            }
        }
        catch (Exception ex)
        {
            objException.keepExceptionDetails(PageName, "bindgridview()", ex.Message);
            Response.Redirect("SisError.aspx");
        }
        return dt;
    }

    private void GoToBack()
    {
        string strScript = "<script language ='javascript'>";
        strScript = strScript + "fnback();";
        strScript = strScript + "</script>";
        ClientScript.RegisterStartupScript(this.GetType(), "", strScript, false);
    }

    int i = 0;
    int j = 0;
    protected void rptWorksheet_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
        {

            Label lblsn = (Label)e.Item.FindControl("lblsn");
            i += 1;
            lblsn.Text = i.ToString();
            HyperLink Link = (HyperLink)e.Item.FindControl("hpldwn");
           // HyperLink LinkWord = (HyperLink)e.Item.FindControl("hpldwnWord");
            ImageButton img_Available = (ImageButton)e.Item.FindControl("img_open");
            string fname = "http://sisonline.in/Worksheet/" + (Session["SchoolId"]).ToString() + "/" + Link.Text;
            string filepath = "Worksheet/" + (Session["SchoolId"]).ToString() + "/" + Link.Text;
            bool available = File.Exists(Server.MapPath(filepath));
           
            if (available)
            {
                //if (Link.Text.Contains(".pdf"))
                //{
                    if (Request.Browser.Browser.Contains("Mozilla") || Request.Browser.Browser.Contains("Firefox"))
                    {
                        //LinkWord.Visible = false;                       
                        Link.ForeColor = System.Drawing.Color.Blue;                      
                        Link.Attributes["style"] = "cursor:pointer";                     
                        img_Available.Visible = true;
                        Link.NavigateUrl = fname;
                        Link.Target = "_blank";
                      
                    }
                    else
                    {
                        //LinkWord.Visible = false;
                        j += 1;
                        Link.ForeColor = System.Drawing.Color.Blue;
                        HtmlGenericControl control = (HtmlGenericControl)e.Item.FindControl("Frame1");
                        control.Attributes["src"] = fname;
                        ModalPopupExtender modal = (ModalPopupExtender)e.Item.FindControl("ModalPopupExtender1");
                        modal.Enabled = true;
                        modal.BehaviorID = "MPE" + j + "";
                        Link.Attributes["style"] = "cursor:pointer";
                        Label lbl_Header = (Label)e.Item.FindControl("lbl_PopUPHeader");
                        lbl_Header.Text = Link.Text;
                        img_Available.Visible = true;

                    }
                //}
                //else
                //{
                    //LinkWord.Visible = true;
                    //Link.Visible = false;
                    //LinkWord.ForeColor = System.Drawing.Color.Blue;
                    //LinkWord.Attributes["style"] = "cursor:pointer";
                    //LinkWord.NavigateUrl = fname;
                    //LinkWord.Target = "_blank";
                //}
            }
            else
            {
                Link.Text = "No Attachment";
                Link.ForeColor = System.Drawing.Color.Red;
                Link.Style.Add("text-decoration", "none");
                img_Available.Visible = false;
                //LinkWord.Visible = false;
            }
        }

    }

    protected void btnsentrefresh_Click(object sender, EventArgs e)
    {
        bindgridview();
    }

    protected void rptWorksheet_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        if (e.CommandName == "Download")
        {
            //bindgridview();
            HyperLink Link = (HyperLink)e.Item.FindControl("hpldwn");
            string fname = "http://sisonline.in/Worksheet/" + (Session["SchoolId"]).ToString() + "/" + Link.Text;
            string filepath = "Worksheet/" + (Session["SchoolId"]).ToString() + "/" + Link.Text;
            if (Link.Text.Contains(".pdf"))
            {
                if (Request.Browser.Browser.Contains("Mozilla") || Request.Browser.Browser.Contains("Firefox"))
                {
                    Response.Write("<script>");
                    Response.Write("window.open('" + fname + "','height=300, width=250','_blank')");
                    Response.Write("</script>");
                }
                else
                {
                    HtmlGenericControl control = (HtmlGenericControl)e.Item.FindControl("Frame1");
                    control.Attributes["src"] = fname;
                    ModalPopupExtender modal = (ModalPopupExtender)e.Item.FindControl("ModalPopupExtender1");
                    modal.Enabled = true;
                    //modal.BehaviorID = "MPE1";
                    Label lbl_Header = (Label)e.Item.FindControl("lbl_PopUPHeader");
                    lbl_Header.Text = Link.Text;
                    modal.Show();
                }
            }
            else
            {

                Response.Write("<script>");
                Response.Write("window.open('" + fname + "','height=300, width=250','_blank')");
                Response.Write("</script>");
                //HtmlAnchor anchor = (HtmlAnchor)e.Item.FindControl("a_redirect");
                //anchor.HRef = fname;
                //anchor.Target = "_blank";
               

            }
          
        }
    }   
}



http://www.aspsnippets.com/Articles/ASPNet-Nested-GridViews-GridView-inside-GridView-with-Expand-and-Collapse-feature.aspx


http://www.aspdotnet-suresh.com/2012/05/gridview-with-in-gridview-or-nested.html


http://forums.asp.net/p/1673163/4385339.aspx?Re+Javascript+ASP+expand+collapse+nested+gridview


http://mosesofegypt.net/post/Building-a-grouping-Grid-with-GridView-and-ASPNET-AJAX-toolkit-CollapsiblePanel.aspx