留言簿

我要留言
留言搜索

2006-05-01 10:48  笑天

版主您好.您做的控件非常方便,在做分页的时候我都一直使用您的控件.我也向同士推荐您的控件
在使用过程中,遇到了一些问题.捞烦您一下
分页存储过程中,如果使用了多表内联,页应该怎么分?
比如这个存储过程

CREATE Procedure [ShowAudit]
(
	@ManID int
)
AS 
	SET NOCOUNT ON;

	SELECT 
		Audit.Aud_Value,     --审核结果
		Proj.Proj_Area,      --项目所在地
		Proj.Proj_Name,      --项目名称
		Enter.Enter_Name,    --项目所属企业名称
		Proj.Proj_Trade,     --项目所属行业
		Proj.Proj_ID         --项目PKID编号
	FROM
		Audit
		INNER JOIN Man ON Audit.Aud_Man = Man.Man_ID
		INNER JOIN Enter ON Audit.Aud_Enter = Enter.Enter_ID 
		INNER JOIN Proj ON Audit.Aud_Enter = Proj.Proj_Enter
	WHERE 
		(Audit.Aud_Value is NULL)
		AND (Proj.Proj_NowMan=@ManID) 
		AND (Audit.Aud_Man=@ManID)
		AND (NOT Enter.Enter_Name IS NULL)
		AND (NOT Proj.Proj_Name IS NULL)
          ORDER BY
                  Proj.Proj_Trade       --根据项目所属行业分类

其中,Enter表和 Proj表是一对一关系   关系键是:Enter.Enter_ID = Proj.Proj_Enter
Man和Enter 是多对多关系,中间用Audit表  关系键是: 
          Audit.Aud_Man = Man.Man_ID

          Audit.Aud_Enter = Enter.Enter_ID

如何增加@PageSize 和 @CurrentPageIndex 进行分页提取?
回复:您要分页的数据来自于主表Audit,所以分页的关键都在于这个表,其它的关联语句可以理解为条件,类似于where子句,所以分页时不需要理会其它表,只需要象上面一样把它们关联起来即可,您没有提到Audit表是否有标识列或唯一主键,如果没有标识列或主键,那是无法用存储过程分页的!如果有标识列,那么和单表分页没有多少差别,唯一要注意的是选取当前页的数据时,基条件是关联多个表得来的,并不是只对一个表,另外最后的order by子句中,必须加上Audit表的标识列。谢谢!

2006-04-30 15:45  帝国入侵者

管理员您好,首先很感谢您开发了那么好的一个控件,对我开发程序真的提供了很大的方便了~
但在开发的过程中有个问题需要您的帮助,我用IIS的ISAPI ReWrite组件制作网站,可是在分页的代码中连接还是为动态的连接,请问有办法重写URL输出函数吗?
例如地址栏为:http://127.0.0.1/list8.html
采用ReWrite转跳,实际页面为:list.aspx?id=8
用分页控件不管是GET或者POST提交,最后都是显示动态页面的连接,例如:list.aspx?id=8&page=1
但我想要得到的URL是:list8_1.html,变的只是“_1”的值,第几页就是“_几”,能实现这样的功能吗?望答复,谢谢...
回复:您好,很抱歉这个控件现在还不支持Url Rewrite技术,所以要实现您所说的功能,只能自己修改源代码,我准备在下一个版本中加入对Url Rewrite的支持,但因为手头的项目仍得两三个月才能完成,所以暂时没有时间进行升级。请原谅,谢谢!

2006-04-27 21:28  鱼的眼泪

斑竹您好!首先感谢您开发了这样的一个好的控件并且无私的放倒网络中大家共享,我在用了您的控件后发现了一个问题,您的控件使用C#编写的,我的项目使用VB开发的,我得数据可以成功的绑定到DATALIST上,但是您的分页控件无法显示,不知道原因为何,请您在百忙中给急切的我一盏明灯,我的MSN:luoxue_1981@hotmail.com希望您能和我联系,谢谢
回复:您好,这个问题和用什么语言没有关系,分页控件不显示最可能的原因有以下几点:
  • Visible属性被设为false;
  • 要分页的记录只有一页,分页控件默认在只有一页数据的情况下不会显示,除非您将AlwaysShow属性设为true;
谢谢!

2006-04-27 09:29  张军

老师    你好!
请问怎么去掉Datagrid超级链接列的下划线。请老师给弟子帮个忙,多多谢谢了。
回复:那是用CSS样式表控制的,您可以在页面定义这样的样式来使整个页面的超链接都没有下划线:
A:Link, A:Visited,A:Hover{text-decoration: none}
谢谢!

2006-04-25 16:58  TigerCote

控件在 .net 2.0 下好像不行呢?
回复:您好,我还没有在.net 2.0下认真测试过,所以不太清楚是否会有什么问题,因为最近半年多一直都在用.net 1.1+vs.net 2003开发一个项目,没有时间在.net 2.0下测试和升级,您能否将您遇到的问题记下来发给我?我会在下次升级时解决这些问题。谢谢!

2006-04-24 19:25  网中飞人

Private Sub butQuote_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butQuote.Click
        Dim Count As Integer = 0
        Dim ThisItem As DataGridItem

        Dim dt As DataTable = New DataTable
        Dim dr As DataRow
        dt.Columns.Add(New DataColumn("Cells1", GetType(String)))
        dt.Columns.Add(New DataColumn("Cells2", GetType(String)))
        dt.Columns.Add(New DataColumn("Cells3", GetType(String)))
        dt.Columns.Add(New DataColumn("Cells4", GetType(String)))
        dt.Columns.Add(New DataColumn("Cells5", GetType(String)))

        For Each ThisItem In dgStock.Items
            Dim Selection As CheckBox = CType(ThisItem.FindControl("ChkStock"), CheckBox)
            If Not Selection Is Nothing Then
                If Selection.Checked Then
                    dr = dt.NewRow()
                    dr(0) = CType(dgStock.Items(ThisItem.ItemIndex).Cells(0).Controls(0), HyperLink).Text
                    dr(1) = ThisItem.Cells(1).Text & ""
                    dr(2) = ThisItem.Cells(2).Text & ""
                    dr(3) = ThisItem.Cells(3).Text & ""
                    dr(4) = ThisItem.Cells(4).Text & ""
                    dt.Rows.Add(dr)

                    Count = Count + 1
                End If
            End If
        Next
        If Count = 0 Then
            RegisterStartupScript("alert", "<script language=javascript>window.alert('最少要选择一项');</script>")
            Exit Sub
        End If
        Session("quote") = dt
        Response.Redirect("order.aspx")
    End Sub

上面代码在使用PostBack分页方式时就可以正常的发出订单,但如果改成Url分页方式时,不管有没选择过,Count总是为0,提示“最少要选择一项”,请问一下应该怎样修改呢?
回复:您好,Url分页时每次分页都相当于重新打开一个新页面,您使用的复选框的值是需要回发才能获取的,所以要获取这些复选框的值,您只能使用PostBack方式分页。谢谢!

2006-04-21 10:59  王路

您好:
   我在用您的分页控件的时候,比如我绑定了一个dataguid,每条记录有各自的超连接,点击后查看详细信息,我要从详细信息返回到列表时,我想定位到列表的那一页,但是不知道怎么去定位,在AspNetPager1_PageChanged 事件中能设置AspNetPager1.CurrentPageIndex 的值,但是在其他地方怎么不能设置啊!要是这样的话,我就不能定位到我刚才是从那一页查看记录的详细信息的!就是说我不管是从那一页看的详细信息,在查看完信息的时候回去永远是第一页!敬请解答!谢谢!
回复:您可以用客户端脚本history.back()来返回前一页,用postback方式分页时,您是无法在不回发的情况下直接跳转到某一页的,要实现这样的功能,您需要用url方式分页。谢谢!

2006-04-20 22:43  无名氏

该控件page索引是通过地址栏传递的,我现在同样通过地址栏传递中文数据,2个字或2个字以上是可以的,1个中文字就不行,点击第二页或下一页时拿到的值是错误的,

打个比方用户通过输入1个中文字,然后点击搜索,我是传到本页做处理的,条件都搜索出来后。我再点击第2页出错,用户如输入2个或2个以上中文字就没关系,急啊,请速回,麻烦了
回复:您好,在Url中传递中文时请用Server.UrlEncode方法编码一下后再传递,否则很容易出现乱码问题。谢谢!

2006-04-19 10:36  南文焕

您好,问题我已经解决了。
整个过程是这样的:我自己通过您写的那个代码工具注册了变量。然后将这个变量填写到那个查询条件里面去了。本以后程序会自动识别的。但是却没有,它把这个当成字符串了。我后来才发现问题在这,将存储过程里面的那个变量是用+和@where连接就没有问题。
谢谢您的回复,建议您的代码工具程序判断一下这个。如果是变量的话,系统不要把他作为字符串对待了。
回复:您好,存储过程中是不能将整个where子句用变量替换的,如果一定要这样做,您必须用exec方法来执行这个动态sql语句。谢谢!

2006-04-18 22:14  lxh

下面是我绑定DATAGRID的代码,请帮我看一下,为什么Name取到的总是第一页的值,而不是当前页中的第一列的值,是不是
	'取得当前页DataGrid中第一列中所有的值
        Dim ThisItem As DataGridItem
        For Each ThisItem In dgStock.Items
            Name += ThisItem.Cells(0).Text & ","
        Next
这一段写错地方了呢?
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If Not IsPostBack Then
            FirstBind()
        End If
    End Sub

    Sub FirstBind()
        comStock = New SqlCommand("sp_List1", Conn)
        comStock.CommandType = CommandType.StoredProcedure
        comStock.CommandTimeout = 120
        comStock.Parameters.Add("@pageindex", 1)
        comStock.Parameters.Add("@pagesize", 1)
        comStock.Parameters.Add("@docount", True)
        Conn.Open()
        Pager.RecordCount = CInt(comStock.ExecuteScalar())
        Conn.Close()
        BindData()
	'取得当前页DataGrid中第一列中所有的值
        Dim ThisItem As DataGridItem
        For Each ThisItem In dgStock.Items
            Name += ThisItem.Cells(0).Text & ","
        Next
    End Sub

    Sub BindData()
        comStock = New SqlCommand("sp_List1", Conn)
        comStock.CommandType = CommandType.StoredProcedure
        comStock.CommandTimeout = 120
        comStock.Parameters.Add("@pageindex", Pager.CurrentPageIndex)
        comStock.Parameters.Add("@pagesize", Pager.PageSize)
        comStock.Parameters.Add("@docount", False)
        Conn.Open()
        dgStock.DataSource = comStock.ExecuteReader()
        dgStock.DataBind()
        Conn.Close()
    End Sub
回复:您这一段代码写在什么地方?我觉得您应该在DataGrid的ItemDataBound事件处理程序中去取。谢谢!
;