C# 如何使用C从数据表中选择数据库的第一行数据?
如何选择datatable中的第一行数据?并在labelbox上显示内容,以及单选按钮C# 如何使用C从数据表中选择数据库的第一行数据?,c#,database,visual-studio,C#,Database,Visual Studio,如何选择datatable中的第一行数据?并在labelbox上显示内容,以及单选按钮 OleDbDataAdapter dAdap = new OleDbDataAdapter(command); DataTable dTable = new DataTable(); dAdap.Fill(dTable); foreach(DataRow row in dTable.Rows) { question = row["QUESTION"].ToString(); c1 = row[
OleDbDataAdapter dAdap = new OleDbDataAdapter(command);
DataTable dTable = new DataTable();
dAdap.Fill(dTable);
foreach(DataRow row in dTable.Rows)
{
question = row["QUESTION"].ToString();
c1 = row["C1"].ToString();
c2 = row["C2"].ToString();
c3 = row["C3"].ToString();
c4 = row["C4"].ToString();
ans = row["ANSWER"].ToString();
}
lblQuest.Text = question;
btnA.Text = c1;
btnB.Text = c2;
btnC.Text = c3;
btnD.Text = c4;
我尝试了这段代码,但它只显示最后一行。当我尝试重新运行查询时也是如此。它没有刷新/替换/覆盖值,只显示第一个查询的最后一行
编辑:
是的,因为变量在每次迭代时都会被覆盖,如果您只想选择第一行值,那么最后一次迭代的值将被覆盖使用dTable[0][ColumnIndex] 要在按钮上加载下一行,请单击“执行”:
int currentRow = 0;
DataTable myDt;
private void LoadNextRow()
{
currentRow++;
myLabel.Text = myDt[currentRow]["MyColumn"].ToString();
}
private void OnButtonClick(....)
{
LoadNextRow();
}
您的问题是每个循环都会覆盖您的变量。循环遍历整个数据表后,以最后一行结束,并仅显示该行 要获得所需的功能,需要将DataTable存储为属性而不是局部变量 其中一种方法是跟踪当前正在查看的行。然后,单击“下一步”按钮时,只需输入当前数字并重新分配值
class YourClass
{
private DataTable dt { get; set; }
private int CurrentRow { get; set; }
private void SomeMethod()
{
OleDbDataAdapter dAdap = new OleDbDataAdapter(command);
dt = new DataTable();
dAdap.Fill(dt);
CurrentRow = 0;
AssignToRow();
}
private void AssignToRow()
{
var row = dt.Rows[CurrentRow];
lblQuest.Text = row["QUESTION"].ToString();
btnA.Text = row["C1"].ToString();
btnB.Text = row["C2"].ToString();
btnC.Text = row["C3"].ToString();
btnD.Text = row["C4"].ToString();
}
private void NextButton_Click(object sender, EventArgs e)
{
CurrentRow++;
AssignToRow();
}
}
因为在每次迭代中,您都会覆盖变量中的前一个值。您是否真正理解该代码的作用?我认为这将是解决问题的关键……对不起,你能建议如何改进它吗?更改foreach语句还是更改为另一个循环@费尔多,你能纠正我吗。在foreach中,im将表中的内容分配给相应的变量。然后我迷路了。对不起,没错。但正如前面所说的,在每次迭代中都会覆盖。因此,要获得第一行,根本不使用循环。如果您想在注释中使用“下一步”按钮,您可能会将DT另存为类字段,并使用某种绑定。@Fildor我尝试过使用它。我编辑了我的帖子。感谢您指出不要使用循环。我将研究并改进代码。到现在为止,代码将是我的基线。实际上,我只想从第一行开始。然后当我点击下一步。它将显示第二个,依此类推。所以您有按钮“下一步”,当您按下它时,它需要从下一行加载新值?是的。但是我不能为这个按钮构造语法,因为我一直在做这个。虽然这可能对这个简单的例子有效,但OP最好还是读懂数据绑定…数据表的好文档,就是这样
class YourClass
{
private DataTable dt { get; set; }
private int CurrentRow { get; set; }
private void SomeMethod()
{
OleDbDataAdapter dAdap = new OleDbDataAdapter(command);
dt = new DataTable();
dAdap.Fill(dt);
CurrentRow = 0;
AssignToRow();
}
private void AssignToRow()
{
var row = dt.Rows[CurrentRow];
lblQuest.Text = row["QUESTION"].ToString();
btnA.Text = row["C1"].ToString();
btnB.Text = row["C2"].ToString();
btnC.Text = row["C3"].ToString();
btnD.Text = row["C4"].ToString();
}
private void NextButton_Click(object sender, EventArgs e)
{
CurrentRow++;
AssignToRow();
}
}