为了能动态地为datagrid 添加行,并可修改已添加的行我使用datagrid的模板列,每一列都是用textbox,可是最后我用For Each gridrow As DataGridItem In DataGrid1.Items '确信是数据项而不是页首或页尾
If gridrow.ItemType = ListItemType.Item Or gridrow.ItemType=ListItemType.AlternatingItem Then
dim sh as string =CType(gridrow.FindControl("Txb_sh"), TextBox).Text
.....
End If
Next
问题1: CType(gridrow.FindControl("Txb_sh"), TextBox).Text的值却为""(我已经在textbox中添加了值)为了保存dataset的状态,我是用了viewstate("data")=dataset1问题1: 可是在添加行之后,在textbox中输入内容,在添加行,却会将已添加行中输入的内容清空了
If gridrow.ItemType = ListItemType.Item Or gridrow.ItemType=ListItemType.AlternatingItem Then
dim sh as string =CType(gridrow.FindControl("Txb_sh"), TextBox).Text
.....
End If
Next
问题1: CType(gridrow.FindControl("Txb_sh"), TextBox).Text的值却为""(我已经在textbox中添加了值)为了保存dataset的状态,我是用了viewstate("data")=dataset1问题1: 可是在添加行之后,在textbox中输入内容,在添加行,却会将已添加行中输入的内容清空了
If gridrow.ItemType = ListItemType.EditItem
If gridrow.ItemType = ListItemType.EditItem Then
dim sh as string = CType(gridrow.FindControl("Txb_sh"), TextBox).Text
End If
Next
这个地方改了就错了。我想我还是把我的思路给大家说一下吧
datagrid 里面的列是模板列,除了最后的控制列是删除按钮外,其它均为textbox,为的是能够修改而不是用datagrid提供的编辑按钮功能。
然后在datagrid的外面放了两个按钮添加和保存,还有一个textbox是用来输入要增加的行数的。
添加按钮的功能是能够增加规定行数的行,并且是能够多次添加,即第一次课添加2行,第二次课在上一次的基础上再增加3行,这样就有了5行记录。
保存的时候从datagrid中循环从每一行取出数据可放入dataset后再操作,方法即使上面的从datagrid的每一行的模板列取数据CType(gridrow.FindControl("Txb_sh"), TextBox).Text;至于gridrow.ItemType = ListItemType.Item 是判断该row是否为datagrid里的行,不一定是编辑行。现在的问题就是:CType(gridrow.FindControl("Txb_sh"), TextBox).Text取出的数据是中为""
if(!IsPostBack)
{
//这里绑定DataGrid才对
}
datagrid1.datasource=dataset1
datagrid1.databind()这个数据集是由一个adapter生成的,后来我为了使页面初始时能显示无数据的datagrid,将adapter.fill(dataset1),去掉了
Sub Page_Load
If Not IsPostBack
datagrid1.datasource=dataset1
datagrid1.databind()
End If
End Sub
是的,我是这样写的,但是我再调成的时候发现了一个很奇怪的现象,就是在执行完添加按钮的事件之后
(譬如添加行数为2),会执行saveViewState()这个重载的函数,而执行完他之后,有进入page_load里面执
行并且此时ispostback=false(这里很奇怪),之后bddsm_dataset里面的表bddsm的rows=0,之后又执行saveViewState()
使ViewState("Data")中的dataset中的表bddsm的rows=0,这样本次添加结束;可我在继续执行添加先执行
LoadViewState(ByVal savedState As Object),取出视图中的dataset,这时bddsm_dataset里面的表bddsm
的rows竟然 又等于2了?????????
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.OleDbConnection1 = New System.Data.OleDb.OleDbConnection
Me.OleDbCommand1 = New System.Data.OleDb.OleDbCommand
Me.OleDbDataAdapter1 = New System.Data.OleDb.OleDbDataAdapter
Me.Bddsm_dataset1 = New jsjxlibrary.bddsm_dataset
CType(Me.Bddsm_dataset1, System.ComponentModel.ISupportInitialize).BeginInit()
'
'OleDbDataAdapter1
'
Me.OleDbDataAdapter1.DeleteCommand = Me.OleDbCommand1
Me.OleDbDataAdapter1.InsertCommand = Me.OleDbCommand1
Me.OleDbDataAdapter1.SelectCommand = Me.OleDbCommand1
Me.OleDbDataAdapter1.UpdateCommand = Me.OleDbCommand1
'
'Bddsm_dataset1
'
Me.Bddsm_dataset1.DataSetName = "bddsm_dataset"
Me.Bddsm_dataset1.Locale = New System.Globalization.CultureInfo("zh-CN")
CType(Me.Bddsm_dataset1, System.ComponentModel.ISupportInitialize).EndInit() End Sub
Protected Overrides Sub LoadViewState(ByVal savedState As Object) MyBase.LoadViewState(savedState)
'取得编辑前的DataSet的视图状态
If Not ViewState("Data") Is Nothing Then Bddsm_dataset1 = CType(ViewState("Data"), DataSet)
End If If Not ViewState("LastEditedPage") Is Nothing Then '取得视图状态中保存的当前页的索引
lastEditedPage = CInt(ViewState("LastEditedPage"))
End If
End Sub
Protected Overrides Function SaveViewState() As Object
'保存当前DataSet的视图状态
ViewState("Data") = Bddsm_dataset1
'保存当前页面索引的视图状态
ViewState("LastEditedPage") = lastEditedPage
Return (MyBase.SaveViewState())
End Function Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'OleDbConnection1
'
'添入连接
Me.OleDbConnection1.ConnectionString = ConfigurationSettings.AppSettings("ConnectionString")
'首次加载信息
If Not IsPostBack Then
Try
'Me.loaddataset()
DataGrid1.DataSource = Me.Bddsm_dataset1.Tables("bddsm")
DataGrid1.DataBind()
Catch eload As Exception
Me.Response.Write(eload.Message)
End Try
End If
End Sub Private Sub btn_查看建议_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_查看建议.Click
Me.Response.Redirect("查看用户建议购买.aspx")
End Sub Private Sub btn_保存报订单_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_保存报订单.Click
'循环取得DataGrid控件中的项,并把每项的数据保存到DataSet中
For Each gridrow As DataGridItem In DataGrid1.Items '确信是数据项而不是页首或页尾
If gridrow.ItemType = ListItemType.Item Or gridrow.ItemType = ListItemType.AlternatingItem Then '建立DataSet中testTable表的新行
Dim row As DataRow = Me.Bddsm_dataset1.Tables("bddsm").NewRow
'针对绑定数据源的数据项索引建立数据行的索引
row = Me.Bddsm_dataset1.Tables("bddsm").Rows(gridrow.DataSetIndex)
'取得当前行文本框中的数据值,添加到DataSet中testTable表
row("bddbh") = "jjj" 'Trim(Me.txb_报订单号.Text)
row("sh") = CType(gridrow.FindControl("Txb_sh"), TextBox).Text
row("sm") = CType(gridrow.FindControl("Txb_mc"), TextBox).Text
row("bb") = CType(gridrow.FindControl("Txb_bb"), TextBox).Text
row("dj") = CDbl(Trim(CType(gridrow.FindControl("Txb_dj"), TextBox).Text))
row("dgsl") = CInt(Trim(CType(gridrow.FindControl("Txb_dgsl"), TextBox).Text))
End If
Next
End Sub Private Sub DataGrid1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.ItemCommand '删除
If e.CommandName = "Delete" Then
'移除当前绑定的数据表中的指定行
Bddsm_dataset1.Tables("bddsm").Rows.Remove(Bddsm_dataset1.Tables("bddsm").Rows(e.Item.DataSetIndex))
'防止最后页删除唯一的一条记录时出现异常信息
If DataGrid1.PageCount - DataGrid1.CurrentPageIndex = 1 And DataGrid1.Items.Count = 1 Then If DataGrid1.PageCount > 1 Then lastEditedPage = lastEditedPage - 1 Else lastEditedPage = 0
End If
End If
DataGrid1.CurrentPageIndex = lastEditedPage
BindGrid()
End If
End Sub Private Sub BindGrid() DataGrid1.DataSource = Me.Bddsm_dataset1.Tables("bddsm")
DataGrid1.DataBind()
lastEditedPage = DataGrid1.CurrentPageIndex End Sub
Private Sub btn_增加_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_增加.Click '如果输入了添加的行数
If Not Me.txb_增加行数.Text Is nothing Then
Try
'获取要增加的行数
Dim addRows As Integer = CInt(Me.txb_增加行数.Text)
Dim i As Integer
For i = 1 To addRows '为当前绑定的数据表添加新行
Dim row As DataRow = Bddsm_dataset1.Tables("bddsm").NewRow
row(0) = "" 'Trim(Me.txb_报订单号.Text)
row(1) = ""
row(2) = ""
row(3) = ""
row(4) = "0.0"
row(5) = "0"
Bddsm_dataset1.Tables("bddsm").Rows.Add(row)
Next
Catch ex As Exception
Response.Write(ex.Message)
End Try
End If
'重新进行数据绑定
BindGrid()
End Sub
Public Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
DataGrid1.CurrentPageIndex = e.NewPageIndex
BindGrid()
End Sub
<asp:datagrid id="DataGrid1" runat="server" Width="581px" AllowPaging="True" PageSize="11" AutoGenerateColumns="False" DataKeyField="sh" DataMember="bddsm" DataSource="<%# bddsm_dataset1 %>">
<HeaderStyle Font-Names="宋体" Font-Bold="True" HorizontalAlign="Center" ForeColor="#990033" VerticalAlign="Middle"BackColor="#6699FF"></HeaderStyle>
<Columns>
<asp:TemplateColumn Visible="False" HeaderText="报订单编号">
<ItemTemplate>
<asp:TextBox id="Txb_bddbh" runat="server" Width="70px" Text='<%# DataBinder.Eval(Container, "DataItem.bddbh") %>'>
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="书号">
<ItemTemplate>
<asp:TextBox id="Txb_sh" runat="server" Width="70px" Text='<%# DataBinder.Eval(Container, "DataItem.sh") %>'>
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="书名">
<ItemTemplate>
<asp:TextBox id="Txb_mc" runat="server" Width="190px" Text='<%# DataBinder.Eval(Container, "DataItem.sm") %>'>
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="出版社">
<ItemTemplate>
<asp:TextBox id="Txb_bb" runat="server" Width="190px" Text='<%# DataBinder.Eval(Container, "DataItem.bb") %>'>
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="订价">
<ItemTemplate>
<asp:TextBox id="Txb_dj" runat="server" Width="50px" Text='<%# DataBinder.Eval(Container, "DataItem.dj") %>'>
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="定购数量">
<ItemTemplate>
<asp:TextBox id="Txb_dgsl" runat="server" Width="40px" Text='<%# DataBinder.Eval(Container, "DataItem.dgsl") %>'>
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="控制">
<ItemTemplate>
<asp:linkButton id="lbtn_删除" runat="server" Width="35px" Text="删除" CommandName="Delete"></asp:linkButton>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle NextPageText="Next" PrevPageText="Previous" HorizontalAlign="Left" Mode="NumericPages"></PagerStyle>
</asp:datagrid>开来救火阿