大量label如何分页显示?

haifeng39 2008-09-12 11:14:43
小弟想实现这样一个功能,从数据库读取一批数据动态创建label,把从数据库里读取的数据赋值给label.text,label在窗口上分两列显示,如果一屏显示不完点击button继续显示,也可以点击上一页返回。
小弟上次请教过各位大侠但是思考了几天都没搞定,希望大侠们能给个参考代码,小弟将不胜感激!
...全文
259 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
米奈希尔 2010-04-29
  • 打赏
  • 举报
回复
mark
haifeng39 2008-09-14
  • 打赏
  • 举报
回复
结帖
haifeng39 2008-09-14
  • 打赏
  • 举报
回复
搞定了。
谢谢ZengHD 的代码,谢谢 CloneCenter 的建议,你的建议非常好我以后尽量用你的方法。祝大家中秋快乐!
下面是我的代码,是根据zengHD大侠的代码改的,希望对有此需要的朋友有所帮助。
Public Class data             
'连接Access 数据

Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb")
Dim cmd As New OleDbCommand("Select text from A2", con)
Dim da As New OleDbDataAdapter(cmd)
Dim ds As New DataSet()
Private Const m_iPageSize As Integer = 10
Private m_iPageCount As Integer = 1000 / m_iPageSize
Private m_iCurrPageIndex As Integer = 1

Private Sub PageIndexChanged(ByVal PageIndex As Integer)
If PageIndex <= 0 OrElse PageIndex > m_iPageCount Then
Return
End If

If ds Is Nothing OrElse ds.Tables.Count <= 0 Then
Return
End If

Dim controls As Control() = Nothing
Dim iLabelIndex As Integer = 0
For i As Integer = (PageIndex - 1) * m_iPageSize To m_iPageSize * m_iCurrPageIndex - 1
controls = Me.Controls.Find("MyLabel" + iLabelIndex.ToString(), False)
If controls IsNot Nothing AndAlso controls.Length > 0 And i < ds.Tables("mytext").Rows.Count Then
DirectCast(controls(0), Label).Text = ds.Tables("mytext").Rows(i)("Text").ToString()
End If

iLabelIndex += 1
Next
End Sub
Private Sub data_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

da.Fill(ds, "mytext")

'创建两行Label,每行5个
Dim MyLabel As Label() = New Label(9) {}
Dim iIndex As Integer = 0
Me.DoubleBuffered = True
Me.SuspendLayout()
For i As Integer = 0 To 1
For j As Integer = 0 To 4
MyLabel(iIndex) = New Label()
MyLabel(iIndex).Left = MyLabel(iIndex).Width * j
MyLabel(iIndex).Top = MyLabel(iIndex).Height * i
MyLabel(iIndex).Text = "MyLabel" + iIndex.ToString()
MyLabel(iIndex).Name = "MyLabel" + iIndex.ToString()
iIndex += 1
Next
Next

Me.Controls.AddRange(MyLabel)
Me.ResumeLayout()

' 加载数据
PageIndexChanged(m_iCurrPageIndex)


End Sub

Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If m_iCurrPageIndex < m_iPageCount Then
PageIndexChanged(System.Threading.Interlocked.Increment(m_iCurrPageIndex))
End If
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If m_iCurrPageIndex > 1 Then
PageIndexChanged(System.Threading.Interlocked.Decrement(m_iCurrPageIndex))
End If
End Sub
End Class
haifeng39 2008-09-12
  • 打赏
  • 举报
回复
ZengHD 大侠不太明白你的意思,那些label是动态创建的。
haifeng39 2008-09-12
  • 打赏
  • 举报
回复
放在Label上主要是格式统一和美观的考虑,其实我也不想5555……
ZengHD 2008-09-12
  • 打赏
  • 举报
回复
不要想怎么把label分页
想想怎么把数据分页显示到label上
yangpeiyu 2008-09-12
  • 打赏
  • 举报
回复
为什么要这样来显示呢。
直接用GRID来邦定就是可以了?
taick 2008-09-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 CloneCenter 的回复:]
btw: 楼主,简单的问题,不要搞复杂化。
[/Quote]

错了!!!!!!
是同意这个.
taick 2008-09-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 CloneCenter 的回复:]
放置一个文本框,让它的底色和窗体背景色相同,去掉文本框的边框,设置为多行显示。不就OK了吗?这个Textbox就可以自己出滚动条了,不需要你分什么页了。
[/Quote]

同意!!!!!!!!!!!!!!!
ZengHD 2008-09-12
  • 打赏
  • 举报
回复
 DataTable dt = new DataTable();
private const int m_iPageSize = 10;
private int m_iPageCount = 1000 / m_iPageSize;
private int m_iCurrPageIndex = 1;

private void PageIndexChanged(int PageIndex)
{
if(PageIndex<=0 || PageIndex>m_iPageCount)
return;

if (dt == null || dt.Rows.Count <= 0)
return;

Control[] controls = null;
int iLabelIndex = 0;
for (int i = (PageIndex - 1) * m_iPageSize; i < m_iPageSize * m_iCurrPageIndex; i++)
{
controls = this.Controls.Find("MyLabel" + iLabelIndex.ToString(), false);
if(controls != null && controls.Length>0)
{
((Label)controls[0]).Text =dt.Rows[i]["Text"].ToString();
}

iLabelIndex++;
}
}

private void Form1_Load(object sender, EventArgs e)
{
dt.Columns.Add("ID");
dt.Columns.Add("Text");

for (int i = 0; i < 1000; i++)
{
DataRow row = dt.NewRow();
row["ID"] = i.ToString();
row["Text"] = "Text " + i.ToString();
dt.Rows.Add(row);
}

//创建两行Label,每行5个
Label[] MyLabel = new Label[10];
int iIndex = 0;
this.DoubleBuffered = true;
this.SuspendLayout();
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 5; j++)
{
MyLabel[iIndex] = new Label();
MyLabel[iIndex].Left =MyLabel[iIndex].Width * j;
MyLabel[iIndex].Top = MyLabel[iIndex].Height * i;
MyLabel[iIndex].Text = "MyLabel" + iIndex.ToString();
MyLabel[iIndex].Name = "MyLabel" + iIndex.ToString();
iIndex++;
}
}

this.Controls.AddRange(MyLabel);
this.ResumeLayout();

// 加载数据
PageIndexChanged(m_iCurrPageIndex);
}

// 上一页
private void button2_Click(object sender, EventArgs e)
{
if (m_iCurrPageIndex < m_iPageCount)
{
PageIndexChanged(++m_iCurrPageIndex);
}
}

// 下一页
private void button1_Click(object sender, EventArgs e)
{
if (m_iCurrPageIndex > 1)
{
PageIndexChanged(--m_iCurrPageIndex);
}
}
CloneCenter 2008-09-12
  • 打赏
  • 举报
回复
btw: 楼主,简单的问题,不要搞复杂化。
CloneCenter 2008-09-12
  • 打赏
  • 举报
回复
放置一个文本框,让它的底色和窗体背景色相同,去掉文本框的边框,设置为多行显示。不就OK了吗?这个Textbox就可以自己出滚动条了,不需要你分什么页了。

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧