CopyTo not working for DataGrid

  • Thread starter Thread starter tshad
  • Start date Start date
T

tshad

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
 
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
 
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
 
Back
Top