Solved

gridview and files using system.IO

Posted on 2007-11-21
21
1,371 Views
Last Modified: 2013-11-26
Hi experts,
I have an aspx page with a gridview control where people can see files that are store in an specific folder in the webserver. This gridview has the name of the file as a link so people can click on the name of the file and the file will open up in a new page.

I also have a dropdown list where the user can choose a different area(folder) to view the files from, and that's where the problem comes in. This works great if I'm only loading files from ONE folder only when i make it more dynamic I can't get the right path to the files.

in my code behind I have and If statement so that if the user chooses whatever section then the gridview displays the data from that folder... BUT in the aspx page I got this

Container.DataItem,"fileName", "~/hr/pdfs/{0} "
I need to make the hr/pdfs dynamic so that when the if statement is trigger it loads the right data and also sets the right path to the files

I made a public variable call test and I need to place it inside the fragment mention before.
And I also will like to delete the files using the 'Delete' button tha comes with the gridView... but I can't seem to do that I tryed really hard a couple of days ago and I had no luck
Thanks alot guys
aspx page

<p>

<asp:DropDownList ID="hardGoodsChoices" runat="server" AutoPostBack="True">

        <asp:ListItem>--PLEASE CHOOSE--</asp:ListItem>

        <asp:ListItem>General</asp:ListItem>

        <asp:ListItem>Weights and Measures</asp:ListItem>

        <asp:ListItem>Sales Programs/Pricing Info</asp:ListItem>

</asp:DropDownList>

</p>
 

<asp:GridView ID="gridview" runat="server" AutoGenerateColumns="false" AllowPaging="true" AllowSorting="true" PageSize="15">

    <Columns>

        <asp:TemplateField HeaderText="File Name" SortExpression="fileName">

                    <EditItemTemplate>

                        <asp:TextBox ID="TextBox1" runat="server" Text='<%#  DataBinder.Eval(Container.DataItem,"fileName") %>'></asp:TextBox>

                    </EditItemTemplate>

                    <ItemTemplate>

                        <asp:Hyperlink ID="Hyperlink1" runat="server" Text='<%#  DataBinder.Eval(Container.DataItem,"fileName") %>' 

                        NavigateUrl='<%# DataBinder.Eval(Container.DataItem,"fileName", "~/hr/pdfs/{0} ") %>' Target="_blank"></asp:Hyperlink>

                    </ItemTemplate>

        </asp:TemplateField>

        <asp:BoundField DataField="fileDate" HeaderText="File Date" SortExpression="fileDate" />

        <asp:BoundField DataField="fileSize" HeaderText="File Size" SortExpression="fileSize" />   

        

    </Columns>

</asp:GridView>

<%=Test%>
 

==================aspx.vb page================

Imports System.IO

Imports System.Text.RegularExpressions

Partial Class files_hardGoods

    Inherits System.Web.UI.Page

    Public test As String

    'Public sFolder As String
 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Master.Page.Header.Title = "Hard Goods"
 

        If Page.IsPostBack Then

            BindGrid()

        End If

    End Sub

    Private Sub BindGrid()
 

        'The line below is for my local machine use the line after is for web server use

        'Dim sFolder As String = "C:\Documents and Settings\Roderick Morales\Desktop\newIntranet\hr\pdfs"

        'the line below is for webserver machine

        Dim sFolder As String

        If hardGoodsChoices.Text = "General" Then

            sFolder = "C:\Inetpub\NewIntranet\files\filesUploaded\hard_goods\sales"

            test = "files/filesUploaded/hard_goods/sales"

        ElseIf hardGoodsChoices.Text = "Weights and Measures" Then

            sFolder = "C:\Inetpub\NewIntranet\files\filesUploaded\hard_goods\weights_measures"

            test = "files/filesUploaded/hard_goods/weights_measures"

        ElseIf hardGoodsChoices.Text = "Sales Programs/Pricing Info" Then

            sFolder = "C:\Inetpub\NewIntranet\files\filesUploaded\hard_goods\pricing"

            test = "files/filesUploaded/hard_goods/pricing"

        Else

            Response.Redirect("hardGoods.aspx")

        End If

        Dim dtFiles As New Data.DataTable
 

        'dtFiles.Columns.Add(New Data.DataColumn("fileName"))

        'dtFiles.Columns.Add(New Data.DataColumn("fileDate"))

        'dtFiles.Columns.Add(New Data.DataColumn("fileSize"))

        'the lines above just call the columns but without giving them a data type

        'the lines below gives the columns a datatype so that they can be sorted

        dtFiles.Columns.Add(New Data.DataColumn("fileName", System.Type.GetType("System.String")))

        dtFiles.Columns.Add(New Data.DataColumn("fileDate", System.Type.GetType("System.DateTime")))

        dtFiles.Columns.Add(New Data.DataColumn("fileSize", System.Type.GetType("System.Int64")))
 

        For Each file As String In System.IO.Directory.GetFiles(sFolder, "*.*")

            Dim fInfo As System.IO.FileInfo = New System.IO.FileInfo(file)
 

            Dim dr As Data.DataRow = dtFiles.NewRow
 
 

            dr("fileName") = fInfo.Name

            dr("fileDate") = fInfo.LastWriteTime

            dr("fileSize") = fInfo.Length
 

            dtFiles.Rows.Add(dr)
 

            dtFiles.AcceptChanges()
 

        Next
 

        'gridview.DataSource = dtFiles

        Dim dv As System.Data.DataView = New System.Data.DataView(dtFiles)
 

        If gridSortExpression <> "" Then

            dv.Sort = gridSortExpression + " " + IIf(gridSortDirection = SortDirection.Ascending, "DESC", "ASC")

        End If

        gridview.DataSource = dv

        gridview.DataBind()
 

        'gridview.DataBind()
 
 

    End Sub

Open in new window

0
Comment
Question by:vthunder70
  • 14
  • 4
  • 3
21 Comments
 
LVL 1

Accepted Solution

by:
MCKreed earned 400 total points
ID: 20331819
you can use the RowDatabound event to change the text in the field.

the e.row.controls(1) points to the second column. start counting with 0.

You could eliminate the template field in the gridview as well.
 Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
 
 

        Dim cell As TableCell

        Dim text As String = ""
 
 

        If (e.Row.RowType = DataControlRowType.DataRow) Then

            cell = CType(e.Row.Controls(1), DataControlFieldCell)

            If cell.Text = "" Then
 

            Else

                text = cell.Text

                cell.Text = "<a href=networkinfobymacaddress.aspx?mac=" & text & ">" & text & "</a>"
 

            End If
 
 

        End If
 
 

    End Sub

Open in new window

0
 

Author Comment

by:vthunder70
ID: 20344257
Hi MCKreed,
Thanks for the reply, I got it to half work with your suggestion. When I use the code the link works if the name of the file doesn't have any spaces, for exaple:

"this_is_an_example.pdf" works, but if the file is name "this is an example.pdf" it DOES NOT work. when I look at the url it only shows anything that was before the first space so for the examble below the Url will stop at "this" so obviously it would not go anywhere. I'm attaching what my code looks like

thanks alot!
-r
Protected Sub gridview_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gridview.RowDataBound

        Dim cell As TableCell

        Dim text As String = ""

        If (e.Row.RowType = DataControlRowType.DataRow) Then

            cell = CType(e.Row.Controls(0), DataControlFieldCell)

            If cell.Text = "" Then

            Else

                text = cell.Text

                cell.Text = "<a href=" & test & "/" & text & " target='_blank'>" & text & "</a>"

                'cell.Text = text

            End If

        End If

    End Sub

Open in new window

0
 
LVL 1

Assisted Solution

by:MCKreed
MCKreed earned 400 total points
ID: 20350616
The following will format the link correctly.
test = replace(test, " ", "%20)

Open in new window

0
 

Author Comment

by:vthunder70
ID: 20350959
well I'm at work right now and I can't test out your suggestion, it seems like it should work but my variable test is not the problem.. test is directory path to the folder
the problem is with text which is the variable that hold the names of the file with the spaces...

so I'm guessing I will have to do something like this:


Dim text = replace(cell.Text, " ", "%20")

Open in new window

0
 

Author Comment

by:vthunder70
ID: 20351456
one more thing,

part of my problem is that I need to have  a delete button so that I can delete files if need be... can you help me out with that?
0
 

Author Comment

by:vthunder70
ID: 20351762
so I was able to do some testing and I guess it works but not sure if its right practice.... the code you gave to replace the blank space with %20 alows me to open file but on the actual gridView it displays the %20... for example if a file is named

fall 2007.pdf........................ it displays on the gridView like fall%202007.pdf

to go around that I declared another variable called text2 where I didn't use a Replace and use that on the name of the file

is that ok?

i'm showing the code below of what it looks like now


Protected Sub gridview_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gridview.RowDataBound

        Dim cell As TableCell

        Dim text As String = ""

        Dim text2 As String = ""

        If (e.Row.RowType = DataControlRowType.DataRow) Then

            cell = CType(e.Row.Controls(0), DataControlFieldCell)

            If cell.Text = "" Then

            Else

                text = replace(cell.Text, " ", "%20")

                text2 = cell.Text

                cell.Text = "<a href=" & test & "/" & text & " target='_blank'>" & text2 & "</a>"

                'cell.Text = text

            End If

        End If

    End Sub

Open in new window

0
 
LVL 1

Expert Comment

by:MCKreed
ID: 20354801
That works for the link. As for the deleting you could add a buttonfield column and then use the gridview rowcommand event.
<asp:ButtonField ButtonType="Button" CommandName="delete" text="Delete" />
 

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand

        If e.CommandName.CompareTo("delete") Then

            'code to delete you'll want to add a reference to the datakey row
 

        End If

    End Sub

Open in new window

0
 

Author Comment

by:vthunder70
ID: 20354878
Ok good, but I'm sorry I don't know what you mean by :

 'code to delete you'll want to add a reference to the datakey row

0
 
LVL 1

Expert Comment

by:MCKreed
ID: 20357249
Sorry my mind was along the set of using a data source with a primary key type of field.
0
 

Author Comment

by:vthunder70
ID: 20358469
no problem, so what do you think I should do to delete files?
0
Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

 

Author Comment

by:vthunder70
ID: 20367791
Hi Experts,

I was wondering if anyone out there can help me out to finish this question

Thanks in advance!
-r
0
 
LVL 37

Assisted Solution

by:samtran0331
samtran0331 earned 100 total points
ID: 20384551
MCKreed is on the right track, but since you don't have primary key, you would use the commandarguement to hold the filename instead of a PK

<asp:ButtonField ButtonType="Button" CommandName="delete" CommandArgument='<%#  DataBinder.Eval(Container.DataItem,"fileName") %>' text="Delete" />
 
Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
        If e.CommandName.CompareTo("delete") Then
           DeleteFile(e.CommandArgument.ToString)
 
        End If
    End Sub

Private Sub DeleteFile(ByVal FileName as string)
'write delete function here
end Sub
0
 

Author Comment

by:vthunder70
ID: 20384761
Thanks for helping in this question!!

this is what my gridView looks like now

<asp:GridView ID="gridview" runat="server" AutoGenerateColumns="False" AllowPaging="True" AllowSorting="True" PageSize="15">
    <Columns>
        <asp:BoundField DataField="fileName" HeaderText="File Name" SortExpression="fileName" />
        <asp:BoundField DataField="fileDate" HeaderText="File Date" SortExpression="fileDate" />
        <asp:BoundField DataField="fileSize" HeaderText="File Size" SortExpression="fileSize" />      
        <asp:TemplateField HeaderText="File Name" SortExpression="fileName">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%#  DataBinder.Eval(Container.DataItem,"fileName") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Button runat="server" CommandName="delete" CommandArgument='<%#  DataBinder.Eval(Container.DataItem,"fileName") %>' Text="Delete" />
                    </ItemTemplate>
        </asp:TemplateField>      
    </Columns>
</asp:GridView>

and I added the code you provide plus I tryed to write the delete funciton but with little luck.


thanks!


aspx.vb code

=================

Protected Sub gridview_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gridview.RowCommand

        If e.CommandName.CompareTo("delete") Then

            DeleteFile(e.CommandArgument.ToString)
 

        End If
 

    End Sub

    Private Sub DeleteFile(ByVal FileName As String)

        'write delete function here

        File.Delete(Server.MapPath("fileName"))

    End Sub

Open in new window

0
 
LVL 37

Expert Comment

by:samtran0331
ID: 20385519
Server.MapPath will return the path that its called from...so basically, the way you have it, the file would have to be in the same folder as the aspx page
0
 

Author Comment

by:vthunder70
ID: 20385569
so,
1. my gridView and the asp:Button that I added looks fine?
2. so I can't use the Server.MapPath because of what you said... so I replaced that with the Public variable I decclared at the top of the page to call the appropiate folder and still doesn't work. This is what it looks like

File.Delete(sFolder("fileName"))
BindGrid()

so what am I doing wrong here?

Thanks
0
 
LVL 37

Assisted Solution

by:samtran0331
samtran0331 earned 100 total points
ID: 20388338
I would either debug or use response.write statements to check the work.
1. On button click, if the commandevent "delete" fires and the commandargument returns the filename, it works.
2. if sFolder("...") return the full physical path to the correct folder/file, then it works ...

and the problem is in the File.Delete

..if you can confirm 1 and 2, then we can go from there.
0
 

Author Comment

by:vthunder70
ID: 20388866
so I output my variable to my page and it returns the right path.. I added the variable like this
<%=sFolder %>

but there is  a problem with the <asp:ButtonField...>

CommandArgument is not a valid Attribute of the asp:ButtonField so it doesn't let the page load

what should I do?
Thanks!
0
 

Author Comment

by:vthunder70
ID: 20388896
This is the error.. and it has to do with the asp:buttonField
Parser Error Message: Databinding expressions are only supported on objects that have a DataBinding event. System.Web.UI.WebControls.ButtonField does not have a DataBinding event.
0
 

Author Comment

by:vthunder70
ID: 20389278
so I tryed as much I could and I still can't get it to work. Here is the error that I get and I copyed all the code that I got so far.. please your help to finish this problem will be much appreaciated.

Thanks a lot

ERROR MESSAGE BELOW

Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
aspx page

=================

<%@ Page Language="VB" MasterPageFile="~/MasterPage3.master" AutoEventWireup="false" CodeFile="hardGoods.aspx.vb" Inherits="files_hardGoods" title="Untitled Page" %>

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

<p>

<asp:DropDownList ID="hardGoodsChoices" runat="server" AutoPostBack="True">

        <asp:ListItem>--PLEASE CHOOSE--</asp:ListItem>

        <asp:ListItem>General</asp:ListItem>

        <asp:ListItem>Weights and Measures</asp:ListItem>

        <asp:ListItem>Sales Programs/Pricing Info</asp:ListItem>

</asp:DropDownList>

</p>
 

<asp:GridView ID="gridview" runat="server" AutoGenerateColumns="False" AllowPaging="True" AllowSorting="True" PageSize="15">

    <Columns>

        <asp:BoundField DataField="fileName" HeaderText="File Name" SortExpression="fileName" />

        <asp:BoundField DataField="fileDate" HeaderText="File Date" SortExpression="fileDate" />

        <asp:BoundField DataField="fileSize" HeaderText="File Size" SortExpression="fileSize" />   

        <asp:TemplateField ShowHeader="False">

            <ItemTemplate>

                <asp:Button ID="Button1" runat="server" CausesValidation="False" CommandArgument='<%# DataBinder.Eval(Container.DataItem,"fileName") %>'

                    CommandName="delete" Text="Delete" OnClick="Button1_Click" />

            </ItemTemplate>

        </asp:TemplateField>
 

    </Columns>

</asp:GridView>
 
 
 

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentLeft" Runat="Server">

</asp:Content>

<asp:Content ID="Content3" ContentPlaceHolderID="RightContent" Runat="Server">

<!--#include file="inc_filesmenu.aspx"-->

</asp:Content>
 
 
 

=========================

aspx.vb page

========================

  Imports System.IO

Imports System.Text.RegularExpressions

Partial Class files_hardGoods

    Inherits System.Web.UI.Page

    Public test As String

    Public sFolder As String
 
 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Master.Page.Header.Title = "Hard Goods"
 

        If Page.IsPostBack Then

            BindGrid()

        End If

    End Sub

    Private Sub BindGrid()
 

        'The line below is for my local machine use the line after is for web server use

        'Dim sFolder As String = "C:\Documents and Settings\Roderick Morales\Desktop\newIntranet\hr\pdfs"

        'the line below is for webserver machine

        'Dim sFolder As String

        If hardGoodsChoices.Text = "General" Then

            'sFolder = "C:\Inetpub\NewIntranet\files\filesUploaded\hard_goods\sales"

            sFolder = "C:\Documents and Settings\Roderick Morales\Desktop\newIntranet\files\filesUploaded\hard_goods\sales\"

            test = "filesUploaded/hard_goods/sales"

        ElseIf hardGoodsChoices.Text = "Weights and Measures" Then

            sFolder = "C:\Inetpub\NewIntranet\files\filesUploaded\hard_goods\weights_measures"

            test = "filesUploaded/hard_goods/weights_measures"

        ElseIf hardGoodsChoices.Text = "Sales Programs/Pricing Info" Then

            sFolder = "C:\Inetpub\NewIntranet\files\filesUploaded\hard_goods\pricing"

            test = "filesUploaded/hard_goods/pricing"

        Else

            Response.Redirect("hardGoods.aspx")

        End If

        Dim dtFiles As New Data.DataTable
 

        dtFiles.Columns.Add(New Data.DataColumn("fileName", System.Type.GetType("System.String")))

        dtFiles.Columns.Add(New Data.DataColumn("fileDate", System.Type.GetType("System.DateTime")))

        dtFiles.Columns.Add(New Data.DataColumn("fileSize", System.Type.GetType("System.Int64")))
 

        For Each file As String In System.IO.Directory.GetFiles(sFolder, "*.*")

            Dim fInfo As System.IO.FileInfo = New System.IO.FileInfo(file)
 

            Dim dr As Data.DataRow = dtFiles.NewRow
 
 

            dr("fileName") = fInfo.Name

            dr("fileDate") = fInfo.LastWriteTime

            dr("fileSize") = fInfo.Length
 

            dtFiles.Rows.Add(dr)
 

            dtFiles.AcceptChanges()
 

        Next
 

        Dim dv As System.Data.DataView = New System.Data.DataView(dtFiles)
 

        If gridSortExpression <> "" Then

            dv.Sort = gridSortExpression + " " + IIf(gridSortDirection = SortDirection.Ascending, "DESC", "ASC")

        End If

        gridview.DataSource = dv

        gridview.DataBind()
 
 

    End Sub
 

    Protected Sub gridview_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gridview.RowCommand

        Dim rowIndex As Integer = e.CommandArgument

        If e.CommandName.CompareTo("delete") Then

            DeleteFile(e.CommandArgument.ToString)
 

        End If
 

    End Sub

    Private Sub DeleteFile(ByVal FileName As String)

        'write delete function here

        File.Delete(sFolder("fileName"))

        'BindGrid()

    End Sub
 

    Protected Sub gridview_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gridview.RowDataBound

        Dim cell As TableCell

        Dim text As String = ""

        Dim text2 As String = ""
 

        If (e.Row.RowType = DataControlRowType.DataRow) Then

            cell = CType(e.Row.Controls(0), DataControlFieldCell)

            If cell.Text = "" Then
 

            Else

                text = Replace(cell.Text, " ", "%20")

                text2 = cell.Text

                cell.Text = "<a href=" & test & "/" & text & " target='_blank'>" & text2 & "</a>"

                'cell.Text = text

            End If
 

        End If
 

    End Sub
 

    Protected Sub gridview_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles gridview.Sorting

        'retrive the name of the clicked column (sort Expression)

        Dim sortExpression As String = e.SortExpression

        'Decide and save the new sort direction

        If (sortExpression = gridSortExpression) Then

            If gridSortDirection = SortDirection.Ascending Then

                gridSortDirection = SortDirection.Descending

            Else

                gridSortDirection = SortDirection.Ascending

            End If

        Else

            gridSortDirection = WebControls.SortDirection.Ascending

        End If

        'save the new sort expression

        gridSortExpression = sortExpression

        'rebind the grid to its data source

        BindGrid()

    End Sub

    Private Property gridSortDirection()

        Get

            'initial state is ascending

            If (ViewState("GridSortDirection") Is Nothing) Then

                ViewState("GridSortDirection") = SortDirection.Ascending

            End If

            'return the state

            Return ViewState("GridSortDirection")

        End Get

        Set(ByVal value)

            ViewState("GridSortDirection") = value

        End Set

    End Property

    Private Property gridSortExpression()

        Get

            'intial sort expression is fileName

            If (ViewState("GridSortExpression") Is Nothing) Then

                ViewState("GridSortExpression") = "fileDate"

            End If

            'Return the sort Expression

            Return ViewState("GridSortExpression")

        End Get

        Set(ByVal value)

            ViewState("GridSortExpression") = value

        End Set

    End Property
 

    Protected Sub gridview_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gridview.PageIndexChanging

        Dim newPageIndex As Integer = e.NewPageIndex

        'set the new page index of the gridview

        gridview.PageIndex = newPageIndex

        'bind the grid to its data source again to updat its contents

        BindGrid()

    End Sub
 

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

        Response.Write(sFolder)
 

    End Sub

End Class

Open in new window

0
 

Author Comment

by:vthunder70
ID: 20406278
Hi experts,
I was wondering if I can get some help to finsh this question.. please!!

thanks,
-r
0
 

Author Closing Comment

by:vthunder70
ID: 31410424
I will have to give only half the points since the question was half answered. I figure the rest of my problem out using a tutorial from 4guys

I still gave 400 pt and gave 100 to samtran for trying to help
Thansk for your help in the first half!
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Creating an analog clock UserControl seems fairly straight forward.  It is, after all, essentially just a circle with several lines in it!  Two common approaches for rendering an analog clock typically involve either manually calculating points with…
Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now