带有Next和Previous按钮的列表
本文关键字:列表 按钮 Previous Next 带有 | 更新日期: 2023-09-27 17:50:42
这是我的代码,我使用我的列表和循环遍历它:
public List<String> InfoList = new List<String>();
int i = 0;
private void populatelblDesc()
{
conn.Open();
string query;
query = "select distinct dp.current_location_code,dci.dest_location_code,dps.order_no,dps.carton_code,dps.company_id_no,dps.no_of_full_cartons,dps.no_of_total_packs,dg.dc_grv_id_no,dg.start_rcv_datetime,s.sku_code,(pt.product_type_desc|| ' ' ||ps.prod_size_desc|| ' ' ||c.colour_desc) product_desc from dc_pallet_stock dps,dc_pallet dp,sku s,purch_order_carton_sku pocs,dc_crane_instruc dci,dc_grv dg,product_type pt,prod_size ps,colour c where dp.pallet_id_no = dps.pallet_id_no and dps.order_no = pocs.order_no and dps.company_id_no = pocs.company_id_no and dps.carton_code = pocs.carton_code and s.sku_id_no = pocs.sku_id_no and s.company_id_no = dps.company_id_no and dp.pallet_id_no ='"+palletId+"' and dci.pallet_id_no(+) = dps.pallet_id_no and dg.dc_grv_id_no = dps.dc_grv_id_no and s.prod_size_id_no = ps.prod_size_id_no(+) and s.colour_id_no = c.colour_id_no(+) order by sku_code";
OracleCommand cmd = new OracleCommand(query, conn);
OracleDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
this.InfoList.Add(dr["current_location_code"].ToString());
this.InfoList.Add(dr["dest_location_code"].ToString());
this.InfoList.Add(dr["order_no"].ToString());
this.InfoList.Add(dr["company_id_no"].ToString());
this.InfoList.Add(dr["no_of_full_cartons"].ToString());
this.InfoList.Add(dr["no_of_total_packs"].ToString());
this.InfoList.Add(dr["dc_grv_id_no"].ToString());
this.InfoList.Add(dr["start_rcv_datetime"].ToString());
this.InfoList.Add(dr["sku_code"].ToString());
this.InfoList.Add(dr["product_desc"].ToString());
}
dr.Close();
conn.Close();
}
Next按钮
private void button1_Click_1(object sender, EventArgs e)
{
populatecompany_name();
if (i + 1 < this.InfoList.Count)
lbl1.Text = this.InfoList[++i];
if (i + 1 < this.InfoList.Count)
lbl2.Text = this.InfoList[++i];
if (i + 1 < this.InfoList.Count)
lbl3.Text = this.InfoList[++i];
if (i + 1 < this.InfoList.Count)
lbl4.Text = this.InfoList[++i];
if (i + 1 < this.InfoList.Count)
lbl5.Text = this.InfoList[++i];
if (i + 1 < this.InfoList.Count)
lbl6.Text = this.InfoList[++i];
if (i + 1 < this.InfoList.Count)
lbl7.Text = this.InfoList[++i];
if (i + 1 < this.InfoList.Count)
lbl8.Text = this.InfoList[++i];
if (i + 1 < this.InfoList.Count)
lbl9.Text = this.InfoList[++i];
if (i + 1 < this.InfoList.Count)
lbl10.Text = this.InfoList[++i];
}
之前的按钮
private void button2_Click(object sender, EventArgs e)
{
populatecompany_name();
if (i - 1 < this.InfoList.Count)
lbl9.Text = this.InfoList[--i];
if (i - 1 < this.InfoList.Count)
lbl8.Text = this.InfoList[--i];
if (i - 1 < this.InfoList.Count)
lbl7.Text = this.InfoList[--i];
if (i - 1 < this.InfoList.Count)
lbl6.Text = this.InfoList[--i];
if (i - 1 < this.InfoList.Count)
lbl5.Text = this.InfoList[--i];
if (i - 1 < this.InfoList.Count)
lbl4.Text = this.InfoList[--i];
if (i - 1 < this.InfoList.Count)
lbl3.Text = this.InfoList[--i];
if (i - 1 < this.InfoList.Count)
lbl2.Text = this.InfoList[--i];
if (i - 1 < this.InfoList.Count)
lbl1.Text = this.InfoList[--i];
if (i - 1 < this.InfoList.Count)
lbl10.Text = this.InfoList[--i];
}
那可能不是最好的方法。正如您在Previous按钮代码中看到的那样,我必须更改表单上标签的填充顺序,否则会出现混乱。
我的问题是:当我点击之前,没有更多的数据去我得到一个异常:
ArgumentOutOfRangeException was unhandles - Specified argument was out of the range of valid values.
Parameter name: index
我如何解决这个问题。我已经试过了我能想到的所有方法。
假设表单上的所有标签都有名称lbl#,那么您可以这样做来获取所有标签,并按名称排序:
private void button1_Click(object sender, EventArgs e)
{
int i = 0;
foreach (Label l in this.Controls
.OfType<Label>()
.OrderBy(l => int.Parse(l.Name.Substring(3))))
{
if (i < InfoList.Count)
l.Text = InfoList[i++];
}
}
我不知道你为什么要改变顺序,因为最后,我猜,InfoList
的第I个元素应该放在第I个标签中。尽管如此,这里有一个颠倒从0到10和从10到0的顺序的例子:
public partial class Form1 : Form
{
List<string> InfoList = new List<string>
{ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
const int labelNameLen = 3;
public Form1() { InitializeComponent(); }
private IEnumerable<Label> Labels
{
get
{
return this.Controls
.OfType<Label>()
.OrderBy(l => int.Parse(l.Name.Substring(labelNameLen)));
}
}
private void button1_Click(object sender, EventArgs e)
{
int i = 0;
foreach (Label l in Labels)
{
if (i < InfoList.Count)
l.Text = InfoList[i++];
}
}
private void button2_Click(object sender, EventArgs e)
{
int i = InfoList.Count;
foreach (Label l in Labels)
{
if (i > 0)
l.Text = InfoList[--i];
}
}
}