我有一个查询从我的数据库中选择一个表格并在某些标签上显示它,但如果查询找到更多的一个数据行,它必须在表单的不同选项卡中显示它们中的每一个,我怎么能存档这个。
代码:
try
{
mycon.Open();
string querieslabels = "Select *From Alerts where State = @state && Lv =@lv";
oleDbCmd = new OleDbCommand(querieslabels, mycon);
oleDbCmd.Parameters.Add("@state", OleDbType.VarChar, 10).Value = "Open";
oleDbCmd.Parameters.Add("@lv", OleDbType.VarChar, 2).Value = "1";
OleDbDataReader read1;
read1 = oleDbCmd.ExecuteReader();
read1.Read();
state = read1[4].ToString();
if (state != "Closed")
{
lblNum.Text = read1[0].ToString();
lblpress.Text = read1[1].ToString();
txtDescription.Text = read1[2].ToString();
lblDate.Text = read1[3].ToString();
lblOk.Visible = false;
pictureBox2.Visible = false;
mycon.Close();
}
else
{
//Hides labels and other control's
MakeNotVisible();
MessageBox.Show("No alert found");
}
catch (Exception error)
{
MessageBox.Show(error.ToString());
}
finally
{
mycon.Close();
}
}
我尝试创建的是一些警报系统,如果有超过1个警报,它应该显示在不同的选项卡中。有人可以指导我解决此问题,任何帮助或建议都表示赞赏。
注意:我使用Win Form。
答案 0 :(得分:2)
您可以创建UserControl
,其代码可以显示DataTable
中的一条记录。然后,您可以创建TabPages
并为每个行添加一个新的UC。注意不要添加太多页面,比如不要超过10-15页!
更新我刚刚注意到您使用的是DataReader
,而不是DataTable
。没问题,同样的解决方案也会在这里解决:使用添加的ShowReader
方法并调用它如下所示..!
以下是一个例子:
public partial class DataForm : UserControl
{
public DataTable theTable { get; set; }
public DataForm()
{
InitializeComponent();
}
public int showTableRow(int rowIndex)
{
if (theTable == null) return -1;
if (theTable.Rows.Count < rowIndex) return -2;
DataRow row = theTable.Rows[rowIndex];
label1.Text = row[0].ToString();
label2.Text = row[1].ToString();
label3.Text = row[2].ToString();
return 0;
}
public void showReaderRow(OleDbDataReader DR)
{
label1.Text = DR[0].ToString();
label2.Text = DR[1].ToString();
label3.Text = DR[2].ToString();
}
}
为了便于访问,我们会保留一个列表:
List<DataForm> theDataPages = new List<DataForm>();
现在,我们可以从Tab
的记录中将DataForm页面添加到tabFormPages
控件DataTable
;在这里我将数字限制为5:
for (int r = 0; r < DTL.Rows.Count && r < 5; r++)
{
TabPage page = new TabPage( (r+1).ToString("Record #0" ));
DataForm aForm = new DataForm();
aForm.theTable = DTL;
aForm.Parent = page;
aForm.showTableRow(r);
tabFormPages.TabPages.Add(page);
theDataPages.Add(aForm);
}
与DataReader
一起使用时,您可以编写如下的读取循环:
while (DR.Read())
{
TabPage page = new TabPage("Alert #"
+ (tabFormPages.TabPages.Count+1).ToString());
DataForm aForm = new DataForm();
aForm.Parent = page;
aForm.showReaderRow(DR);
tabFormPages.TabPages.Add(page);
theDataPages.Add(aForm);
}
首先,将类添加到项目中:Add - Add Usercontrol
。
现在您可以在Designer中打开它并输入您需要的所有Labels
以及放置代码。同时充实showRow
方法,以便在Labels
..
现在,您可以像我上面的TabPages
一样将此类UC添加到Tab
。
如果您使用DataTable
,还可以通过再次致电showRow
让一页显示某条记录:
theDataPages[0].showRow(DTL.Rows.Count - 1);
这将显示第一个TabPage
中的最后一条记录。
如果您确实需要访问该UC上的字段,您可以为这些字段创建公共属性并按如下方式访问它们:
public DataTable theTable { get; set; }
public Label Label1 { get; set; }
//..
public DataForm()
{
InitializeComponent();
Label1 = label1;
//..
}
现在您可以访问字段:
if (theDataPages[0].Label1.Text == "Hiho"
theDataPages[0].Label1.BackColor = Color.Green;
答案 1 :(得分:1)
您使用的是WinForms应用程序还是WebForms应用程序?您可能需要一个Accordion控件(http://www.codeproject.com/Articles/416521/Easy-WinForms-Accordion-Control)或一个Tab控件(http://www.c-sharpcorner.com/UploadFile/mahesh/C-Sharp-tabcontrol/)或类似的东西。您可以根据结果中的行数动态创建其中的选项卡。