Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / ASP.NET / General / August 2007

Tip: Looking for answers? Try searching our database.

CopyTo not working for DataGrid

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
tshad - 28 Aug 2007 18:54 GMT
I am having a real problem getting some of these methods to work.

I am trying to do a CopyTo and I can't get it to copy into my array.

I tried:

Sub ReorderDataGrid()
 Dim theArray(1) as DataGridColumn
 DataGrid1.Columns.CopyTo(theArray,0)
End Sub

And I get this:

System.IndexOutOfRangeException: Index was outside the bounds of the array

The error is on the CopyTo statement.

My DataGrid looks like:

<asp::DataGrid
      Visible=true
      AllowSorting="true"
      AutoGenerateColumns="false"
      CellPadding="0"
      CellSpacing="0"
      ID="DataGrid1"
      runat="server"
      ShowFooter="false"
      ShowHeader="true"
      OnSortCommand="SortDataGrid"
      BorderWidth="0"
      BorderColor="#999999"
      style="padding-right:5px; width:573px">
      <headerstyle Font-Bold="true" />
      <alternatingitemstyle CssClass="alternateRows" />
      <footerstyle BackColor="#E8EBFD" ForeColor="#3D3DB6" Font-Bold="true"
/>
      <pagerstyle BackColor="white" />
      <columns>
       <asp:TemplateColumn sortexpression="JobTitle" ItemStyle-Width="190"
HeaderStyle-Width="190"
         headertext="Job Title" ItemStyle-VerticalAlign="Top"
runat="server">
        <ItemTemplate>
         <asp:HyperLink ID="JobTitle"
          NavigateURL='<%# "displayPositionNS.aspx?PositionID=" &
Container.DataItem("PositionID") %>'
          Text='<%# Container.DataItem("JobTitle")%>'
          OnPreRender="FixHyperLink"
          runat="server"/>
        </ItemTemplate>
       </asp:TemplateColumn>
       <asp:BoundColumn ItemStyle-Width="100" DataField="Location"
         HeaderText="Location"
         ReadOnly="true"
         Visible="True"
         ItemStyle-VerticalAlign="Top"
         SortExpression="Location"/>
       <asp:BoundColumn ItemStyle-Width="40" DataField="PositionType"
         HeaderText="Type"
         ReadOnly="true"
         Visible="True"
         ItemStyle-VerticalAlign="Top"
         SortExpression="PositionType"/>
   </columns>
</asp:DataGrid>

If I do:

Sub ReorderDataGrid()
 Dim theArray() as DataGridColumn
 DataGrid1.Columns.CopyTo(theArray,0)
End Sub

And I get this:

System.NullReferenceException: Object reference not set to an instance of an
object.

I tried running the ReorderDataGrid() from Page_Load before and after
Binding the Grid as well as in the Page_PreRender with the same results.

But this is how the examples I have found on the web have it.

What am I missing?

Thanks,

Tom
tshad - 28 Aug 2007 20:10 GMT
I copied this file from the msdn site and made some changes to both change
the headers and insert one of the columns that is in the array I got from my
CopyTo method.

Neither of these seem to work.  The array still looks the same.

I tried putting the submit code in the PreRender as well and couldn't seem
to get that to work either.

Does anyone know what is missing?

Thanks,

Tom
tshad - 28 Aug 2007 20:35 GMT
Sorry,

Forgot to add the file:

<%@ Page Language="VB" trace=true AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html  >
  <script runat="server">

     Function CreateDataSource() As ICollection

        ' Create sample data for the DataGrid control.
        Dim dt As DataTable = New DataTable()
        Dim dr As DataRow

        ' Define the columns of the table.
        dt.Columns.Add(New DataColumn("IntegerValue", GetType(Int32)))
        dt.Columns.Add(New DataColumn("StringValue", GetType(string)))
        dt.Columns.Add(New DataColumn("CurrencyValue", GetType(double)))

        ' Populate the table with sample values.
        Dim i As Integer

        For i = 0 to 4

           dr = dt.NewRow()

           dr(0) = i
           dr(1) = "Item " & i.ToString()
           dr(2) = 1.23 * (i + 1)

           dt.Rows.Add(dr)

        Next i

        Dim dv As DataView = New DataView(dt)
        Return dv

     End Function

     Sub Page_Load(sender As Object, e As EventArgs)

        ' Load sample data only once, when the page is first loaded.
        If Not IsPostBack Then

           ItemsGrid.DataSource = CreateDataSource()
           ItemsGrid.DataBind()

        End If

     End Sub

  Sub Button_Click(sender As Object, e As EventArgs)

    Dim myArray(3) As DataGridColumn
    Dim ktr as Integer

    ItemsGrid.Columns.CopyTo(myArray, 0)

    Dim column As DataGridColumn
    ktr = 0
    For Each column In  myArray
      ItemsGrid.Columns(ktr).HeaderText = column.HeaderText & " New"
      ktr+=1
    Next column
    ItemsGrid.Columns.AddAt(1,myArray(1))
  End Sub 'Button_Click
  </script>

<head runat="server">
   <title>DataGridColumn Visible Example</title>
</head>
<body>

  <form id="form1" runat="server">

     <h3>DataGridColumn Visible Example</h3>

     Select whether to show or hide the first column.

     <br /><br />

     <b>Product List</b>

     <asp:DataGrid id="ItemsGrid"
          BorderColor="black"
          BorderWidth="1"
          CellPadding="3"
          ShowFooter="True"
          AutoGenerateColumns="False"
          runat="server">

        <HeaderStyle BackColor="#00aaaa">
        </HeaderStyle>

        <FooterStyle BackColor="#00aaaa">
        </FooterStyle>

        <Columns>

           <asp:BoundColumn DataField="IntegerValue"
                Visible="True"
                HeaderText="Item"/>

           <asp:BoundColumn DataField="StringValue"
                Visible="True"
                HeaderText="Description"/>

           <asp:BoundColumn DataField="CurrencyValue"
                Visible="True"
                HeaderText="Price"
                DataFormatString="{0:c}">

              <ItemStyle HorizontalAlign="Right">
              </ItemStyle>

           </asp:BoundColumn>

           <asp:TemplateColumn HeaderText="Select Item"
                Visible="True" >

              <ItemTemplate>

                 <asp:CheckBox id="SelectCheckBox"
                      Text="Add to Cart"
                      Checked="False"
                      runat="server"/>

              </ItemTemplate>

           </asp:TemplateColumn>

        </Columns>

     </asp:DataGrid>

     <br /><br />

     <asp:Button id="SubmitButton"
          Text="Submit"
          OnClick = "Button_Click"
          runat="server"/>

  </form>

</body>
</html>

Tom

>I copied this file from the msdn site and made some changes to both change
>the headers and insert one of the columns that is in the array I got from
[quoted text clipped - 10 lines]
>
> Tom

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.