CopyTo not working for DataGrid

Discussion in 'ASP .Net' started by tshad, Aug 28, 2007.

  1. tshad

    tshad Guest

    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, Aug 28, 2007
    #1
    1. Advertising

  2. tshad

    tshad Guest

    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, Aug 28, 2007
    #2
    1. Advertising

  3. tshad

    tshad Guest

    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

    "tshad" <> wrote in message
    news:...
    >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, Aug 28, 2007
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Mik
    Replies:
    0
    Views:
    433
  2. Ratman
    Replies:
    0
    Views:
    694
    Ratman
    Sep 14, 2004
  3. Martin Heuckeroth
    Replies:
    5
    Views:
    712
    JiangZemin
    Apr 1, 2005
  4. Alan Silver
    Replies:
    1
    Views:
    3,804
    Alan Silver
    Aug 2, 2005
  5. gaurav tyagi
    Replies:
    14
    Views:
    1,367
    gaurav tyagi
    Jan 20, 2006
Loading...

Share This Page