-3

我想遍历设备应用程序上的一些数据。例如:

Select name, surname, mail_ad, phone_nr from cust_details

在表单上,​​我想用下一个和上一个按钮逐行显示。例如:

姓名: 维尔纳

姓名: VDH

邮箱: werner@me.com

电话号码: 0716848805

[上一个] [下一个]

我在这方面遇到了很多麻烦。我以前使用过 List,但它不像我想要的那样工作。有人可以在这里帮助我吗?

我是如何使用列表的:

public List<String> InfoList = new List<String>();
int i = 1;

conn.Open();
string query;
query = "Select name, surname, mail_ad, phone_nr from cust_details";
OracleCommand cmd = new OracleCommand(query, conn);
OracleDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
   this.InfoList.Add(dr["name"].ToString());
   this.InfoList.Add(dr["surname"].ToString());
   this.InfoList.Add(dr["mail_ad"].ToString());
   this.InfoList.Add(dr["phone_nr "].ToString());
}
dr.Close();
conn.Close();

然后在下一个和上一个按钮中:

if (i + 1 < this.InfoList.Count)
   label1.Text = this.InfoList[++i];
if (i + 1 < this.InfoList.Count)
   label2.Text = this.InfoList[++i];
if (i + 1 < this.InfoList.Count)
   label3.Text = this.InfoList[++i];
if (i + 1 < this.InfoList.Count)
    label4.Text = this.InfoList[++i];


if (i - 1 < this.InfoList.Count)
   label1.Text = this.InfoList[--i];
if (i - 1 < this.InfoList.Count)
   label2.Text = this.InfoList[--i];
if (i - 1 < this.InfoList.Count)
   label3.Text = this.InfoList[--i];
if (i - 1 < this.InfoList.Count)
   label4.Text = this.InfoList[--i];

我正在使用标签来显示数据。我遇到的问题:有时当我点击下一个时,标签的顺序会混淆。或 1 个标签中没有任何信息。当我点击上一个并且没有更多细节时,我得到了例外。

4

3 回答 3

2

我不知道这是否是您要寻找的,但只需创建一个类,然后使用List<YourClass>. 通过使用定义它List<YourClass> myList = new List<YourClass>();

要将值添加到列表中,您必须创建一个对象YourClass并在那里定义值:

YourClass myClassObject = new YourClass();

myClassObject.name = dr[i].toString(); //This is the database reader 

Class YourClass包含以下属性:

string name, 
string surname, 
string mail_address, 
string phone_nr.

属性是这样写的,并且表现得像全局变量:

internal string mystring {get; set;}

然后您可以遍历此列表并使用以下变量:

name_Lbl.Text = this.myList.name[i]; //This is an example.

然后使用按钮的 OnPress-Event 递增或递减i

编辑:正确命名您的课程;)

编辑 2:有关属性的更多信息,请单击我

于 2013-01-21T07:48:29.003 回答
0

把它变成一个类:

class CustDetails
public string Name
{
get;
set;
}
public string Surname
{
get;
set;
}
public string Email
{
get;
set;
}
public ulong PhoneNumber
{
get;
set;
}
于 2013-01-21T07:44:54.463 回答
0

第一步,将你的详细信息封装到一个数据包类中

public class CustDetails
{
    public string Name {get; set;}
    public string Surname {get; set;}
    public string MailAddress {get; set;]
    public string Phone {get; set;}
 }

步骤 2. 创建 CustDetails 列表——这是您的 InfoList

 public List<CustDetails> InfoList = new List <CustDetails>();

步骤 3. 将您查询的详细信息分配给您的新班级

conn.Open();
string query = "Select name, surname, mail_ad, phone_nr from cust_details";
OracleCommand cmd = new OracleCommand(query, conn);
OracleDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
   var details = new CustDetails { Name = dr["name"].ToString(),
                     Surname = dr["surname"].ToString(),
                     MailAddress = dr["mail_ad"].ToString(),
                     Phone = dr["phone"].ToString() }
   this.InfoList.Add(details);
}
dr.Close();
conn.Close();

第 4 步。跟踪您当前的位置。实现方法以访问上一个和下一个按钮中的上一个或下一个详细信息。您的上一个和下一个按钮处理程序分别如下所示:

//previous
if (current == 0)
    //you are at the beginning of the list, the button should be disabled, 
    // handle it accordingly. In this case I just terminate
    return;
current--;
var detail = InfoList[current];
label1.Text = detail.Name;
label2.Text = detail.Surname;
label3.Text = detail.MailAddress;
label4.Text = detail.Phone;


//next
if (current == (InfoList.Count -1))
    //you are at the endof the list, the button should be disabled, 
    // handle it accordingly. In this case I just terminate
    return;

current++;
var detail = InfoList[current];
label1.Text = detail.Name;
label2.Text = detail.Surname;
label3.Text = detail.MailAddress;
label4.Text = detail.Phone;

只需确保您可以跟踪方法调用之间的“当前”要么将其添加为参数,要么创建一个全局变量。

于 2013-01-21T08:09:23.800 回答