DataGrid事件用法(一)【鸡蛋】

来源:互联网 发布:软件合集蓝奏云 编辑:程序博客网 时间:2024/05/01 08:57

 DataGrid控件是一种可绑定数据的网格控件,和Gridview一样,输出的代码是HTML表格(table);在ASP.NET1.X和2.0里面都包含该控件,更高版本的也许已经不支持了,因为它被功能更为强大的Gridview替代了;对于一个被抛弃的产品,出于维护老项目的需要还是需要我去学习的;

DataGrid页面关键属性设置:

AllowPaging="True"  是否启用分页

AllowSorting="True" 是否启用排序

PageSize="20"  每页的大小

CellSpacing="2"  设置相邻单元格的间距(垂直和水平)

CellPadding="2"  设置每个单元格边框和文本之间的距离

AutoGenerateColumns="False" 是否自动创建和显示数据源中的所有列【默认值是true,一般我们把它设置为false】

还有很多,不一一列举。

构成数据网格的图形元素:

AlternatingItemStyle 代表位于奇数行上的数据绑定行,通过它可以设置奇数行的样式

ItemStyle 代表位于奇数行上的数据绑定行,通过它可以设置奇数行的样式

HeaderStyle 代表网格的表头

PagerStyle 分页导航栏的外观

SeletedStyle 当前选定项的外观

如:

<AlternatingItemStyle CssClass="alterdesc"></AlternatingItemStyle><ItemStyle CssClass="itemdesc"></ItemStyle><HeaderStyle CssClass="title"></HeaderStyle>
将数据绑定到网格:

默认情况下,该控件的视图中包含所有数据源中的列,如果我们想自定义显示的列,需要将AutoGenerateColumns="False"设置为false,默认为true;在这种情况下,只显示在<Columns> </Columns>集合中添加的列;主要区别在于,如果向Columns中添加列,需要指定Columns列的类型;


列类型:

BoundColumn 以纯文本形式显示绑定的数据列

ButtonColumn 这种列的每一项为一个按钮,按钮的文本可以绑定到数据源上

EditItemTemplateColumn 与“编辑”命令关联的按钮,如果某行处于编辑状态下,则使用该类型

HypeLinkColumn 超链接形式显示文本,可以设置当前文本跳转到的地址

ItemTemplateColumn  模板列,这种单元格的显示形式取决于用户自定义的模板【包含4中不同的模板,ItemTemplate、EditItemTemplate、HeaderTemplate、FooterTemplate】

所有列类型都有共有的属性:

HeadText 显示在当前列表头的文本

ItemStyle当前列单元格的样式

HeadStyle 当前列表头样式属性

Visible是否可见

各种列类型绑定数据的方法

(1)BoundColumn

绑定的数据字段:DataField

显示的表头内容:HeaderText

设置文本显示格式:DataFormatString

如:

<asp:BoundColumn DataField="state_name" ReadOnly="True" HeaderText="Pickup Location"><HeaderStyle Width="120px"></HeaderStyle></asp:BoundColumn>
(2)ButtonColumn

代表命令列,可以将每个按钮的文本绑定数据列。它的主要功能就是当你点击按钮时,触发一个动作 执行操作,而不单纯用来显示数据;它会与一段回发的代码关联,回发后会执行服务端的ItemCommand过程,在该过程中我们可以通过CommandName来区分不同列按钮的单击;并通过DatagridItem类的ItemIndex属性获取单击行的索引;

选择列是一种特殊的按钮列,它与一般的按钮咧一样有commandName属性,它有一个SelectIndexChanged事件,会对选定项的变更进行通知,可以通过selectIndex属性获取选定行的索引

如:

<asp:ButtonColumn runat="server" text="select" commandname="select"></asp:ButtonColumn>

为选定行指定样式:

<selectitemstyle backcolor="ccc" />

(3)HypeLinkColumn

DataTextField 设置超链接显示文本的字段  例如【proname】

DataNavigateUrlField 设置关于URL信息字段的名称(一般为url传递参数的值)例如:【proid】

DataNavigateUrlFormatString用于定义URL的最终格式 例如【DataNavigateUrlFormatString=“proinfo.aspx?id={0}”】

例如:

<asp:HypeLinkColumn runat="server"  DataTextField="proname"  headertext=“Name”  DataNavigateUrlField=“proid”   DataNavigateUrlFormatString=“proinfo.aspx?id={0}”><itemstyle width="200px"/></asp:HypeLinkColumn>

这种方式每次只能传递一个参数,如果需要传递多个参数请用模板列或者换个控件gridview

(4)ItemTemplateColumn

直接上代码:

<asp:TemplateColumn HeaderText="Cost Per Minute">    <ItemTemplate>        $<asp:Label id="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "price","{0:N2}") %>'></asp:Label>    </ItemTemplate>       <EditItemTemplate>         $<asp:TextBox id="cost_per_minute" CssClass=text2 runat="server" maxlength="8" Width="70px" Text='<%# DataBinder.Eval(Container.DataItem, "price","{0:N2}") %>'>         </asp:TextBox>    </EditItemTemplate></asp:TemplateColumn>

一个完整的DataGrid控件html代码

<asp:datagrid id="dglist" runat="server" Width="800px" PageSize="20" AllowPaging="True" AllowSorting="True"CellSpacing="2" CellPadding="2" AutoGenerateColumns="False"><AlternatingItemStyle CssClass="css_alterdesc"></AlternatingItemStyle><ItemStyle CssClass="css_itemdesc"></ItemStyle><HeaderStyle CssClass="css_title"></HeaderStyle><Columns>                <asp:TemplateColumn HeaderText="pro_id" Visible="False">  <%--隐藏列,可以在后台获取到他的值--%><ItemTemplate><asp:Label id="lab_pro_id" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "pro_id") %>'></asp:Label></ItemTemplate></asp:TemplateColumn><asp:BoundColumn DataField="name" ReadOnly="True" HeaderText="产品名称"><HeaderStyle Width="90px"></HeaderStyle></asp:BoundColumn><asp:TemplateColumn HeaderText="价格"><ItemTemplate>$<asp:Label id="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "price","{0:N2}") %>'>                 </asp:Label></ItemTemplate><EditItemTemplate>$<asp:TextBox id="price" CssClass=text2 runat="server" maxlength="8" Width="70px" Text='<%# DataBinder.Eval(Container.DataItem, "price","{0:N2}")%>'></asp:TextBox></EditItemTemplate></asp:TemplateColumn><asp:TemplateColumn HeaderText="Action"><ItemTemplate><asp:LinkButton id="btnEdit" runat="server" CommandName="Edit">Edit</asp:LinkButton></ItemTemplate><EditItemTemplate><asp:LinkButton id="btnUpdate" runat="server" CommandName="Update">Update</asp:LinkButton> <asp:LinkButton id="btnCancel" runat="server" CommandName="Cancel">Cancel</asp:LinkButton></EditItemTemplate></asp:TemplateColumn></Columns><PagerStyle Mode="Pages"></PagerStyle></asp:datagrid>

DataGrid数据绑定和分页:

     'DataGrid数据绑定     '假设已经有了dataset数据源     If Not ds Is Nothing AndAlso ds.Tables.Count > 0 Then            If ds.Tables(0).Rows.Count > 0 Then                With dglist                    .DataSource = ds.Tables(0)                    If Not viewstate("pgIndex") Is Nothing Then                        .CurrentPageIndex = CInt(viewstate("pgIndex")) '设置当前页码                    Else                        .CurrentPageIndex = 0 '设置当前页码                    End If                    .DataBind()                    If .PageCount = 1 Then                        .PagerStyle.Visible = False '隐藏分页控件                    Else                        .PagerStyle.Visible = True                    End If                End With            Else                dglist.DataSource = Nothing                dglist.DataBind()            End If        Else            dglist.DataSource = Nothing            dglist.DataBind()        End If        ds.Dispose()        ds = Nothing

分页事件:

    '当页码发生改变时激发    Private Sub dglist_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles dglist.PageIndexChanged        viewstate("pgIndex") = e.NewPageIndex        binddglist() '重新执行数据绑定方法【上面那个方法】    End Sub

DataGrid数据编辑操作

一般分为三个事件处理程序:通过 EditCommand将网格切换为编辑模式,通过CancelCommand将网格切换为只读模式,通过updateCommand保存更改并刷新网格内容;

    '编辑按钮Private Sub dglist_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dglist.EditCommand        Me.dglist.EditItemIndex = e.Item.ItemIndex        bindWaitTimeScrubbing()    End Sub'修改按钮    Private Sub dglist_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dglist.UpdateCommand        Dim txt_price As TextBox = CType(Me.dglist.Items(Me.dglist.EditItemIndex).FindControl("price"), TextBox)        Dim lab_pro_id As Label = CType(Me.dglist.Items(Me.dglist.EditItemIndex).FindControl("lab_pro_id"), Label)             Dim String pro_id = CStr(IIf(lab_pro_id.Text.Trim.Length = 0, "0", lab_pro_id.Text.Trim)),Dim String txt_price=CStr(IIf(txt_price.Trim.Length = 0, "0", txt_price.Text.Trim))               Dim admin As New DAL.Admin        Dim nRt As Int16 = admin.editpro(CInt(pro_id), txt_price, cost_per_minute, CInt(no_of_min_minute), CInt(grace_minute))        If nRt = 1 Then            dglist.EditItemIndex = -1        Else            Response.Write("<script language='javascript'>alert('数据修改失败');</script>")        End If        admin.Dispose()        admin = Nothing        dglist.EditItemIndex = -1        binddglist() '执行数据绑定    End Sub'取消按钮    Private Sub dglist_CancelCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dglist.CancelCommand        dglist.EditItemIndex = -1        binddglist() '执行数据绑定    End Sub






原创粉丝点击