使用ViewState出了个问题???
异常详细信息: System.NullReferenceException: 未设置对象变量或 With 块变量。
代码如下。*号里面是出错的语句!!!!!!!!!
<%@ Page Language="vb"%>
<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.OLEDB"%>
<Script runat="server">
Dim ds as DataSet
Dim blnSet as Boolean = False
Function CreateDataSet as DataSet
Dim i as Integer
Dim arrColors() as String'定义一个存储颜色的数组
'********************************************
'以下代码判断 视图状态Colors 是否存在,如果不存在则自动给数组赋值,如果存在则把视图状态的值赋给数组
'********************************************
If ViewState("Colors") is Nothing then
arrColors = New String(6) {"red","orange","yellow","green","blue","indigo","violet"}
Else
arrColors = ViewState("Colors")
End if
ds = New DataSet("MyDataSet")'创建一个空DataSet
'以下代码新建一个表 并添加字段 Color、ID
Dim dTable as New DataTable("Colors")
dTable.Columns.Add("Color",GetType(String))
dTable.Columns.Add("ID",GetType(Int32))
ds.Tables.Add(dTable)'将上面建的表添加到空 DataSet 中
'开始向表中添加行数据
For i=0 to 6
Dim dr as DataRow = dTable.NewRow()
dr(0) = arrColors(i).ToString
dr(1) = i
dTable.Rows.Add(dr)
Next
return ds'返回这个DataSet
End Function
Sub Page_Load(obj as Object,e as EventArgs)
ds = CreateDataSet
blnSet = true
If not Page.IsPostBack then'如果是第一次显示,则调用数据绑定
BindGrid
End if
End Sub
Sub BindGrid()
dgColors.DataSource = ds
dgColors.DataMember = "Colors"
dgColors.DataBind()'记得一定要数据绑定
End Sub
Sub ChangeColor(obj as Object,e as DataGridItemEventArgs)
Dim intIndex as Integer = e.Item.ItemIndex
If blnSet then
If intIndex>0 then
dgColors.Items(intIndex -1).BackColor = Drawing.Color.FromName(ds.Tables("Colors").Rows(intIndex-1)("Color"))
dgColors.Items(intIndex -1).ForeColor = Drawing.Color.FromName(ds.Tables("Colors").Rows(6-intIndex)("Color"))
End if
End if
End Sub
Sub dgColors_Edit(obj as Object,e as DataGridCommandEventArgs)
dgColors.EditItemIndex = e.Item.ItemIndex
BindGrid()
End Sub
Sub dgColors_Cancel(obj as Object,e as DataGridCommandEventArgs)
End Sub
Sub dgColors_Update(obj as Object,e as DataGridCommandEventArgs)
Dim strColor as String = CType(e.Item.Cells(1).Controls(0),TextBox).Text
ds.Tables("Colors").Rows(e.Item.ItemIndex)("Color") = strColor
************************************************************************
ViewState("Colors")(e.Item.ItemIndex) = strColor
*************************************************************************
dgColors.EditItemIndex = -1
BindGrid()
End Sub
</Script>
<html>
<body>
<form runat="server">
<asp:DataGrid ID="dgColors" Runat="server" AutoGenerateColumns="False" Width="20" OnEditCommand="dgColors_Edit" OnCancelCommand="dgColors_Cancel" OnUpdateCommand="dgColors_Update" OnItemCreated="ChangeColor">
<Columns>
<asp:TemplateColumn HeaderText="ID">
<ItemTemplate>
<asp:Label ID="lblID" Runat="server" Text='<%# Container.DataItem("ID")%>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="Color" HeaderText="Color"></asp:BoundColumn>
<asp:EditCommandColumn HeaderText="Change" EditText="Edit" UpdateText="Change" CancelText="Cancel"></asp:EditCommandColumn>
</Columns>
</asp:DataGrid>
</form>
</body>
</html>