我正在尝试很长时间,但我不能这样做。
我有这个简单的XAML:
<Window ....>
<Grid>
<Button x:Name="tlacitko" Content="Button" HorizontalAlignment="Left" Height="38" Margin="343,259,0,0" VerticalAlignment="Top" Width="149" Click="Button_Click"/>
<TextBlock x:Name="vypisBlock" HorizontalAlignment="Left" Height="188" Margin="32,25,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="442"/>
</Grid>
</Window>
和这个.cs
.. usings ..
namespace Pokus
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
string cs = @"server=localhost;userid=root;
password=vertrigo;database=vzkaznik";
MySqlConnection conn = null;
MySqlDataReader rdr = null;
try
{
conn = new MySqlConnection(cs);
conn.Open();
string stm = "SELECT * FROM elsvo_zpravy";
MySqlCommand cmd = new MySqlCommand(stm, conn);
rdr = cmd.ExecuteReader();
while (rdr.Read())
{
string vypis = "";
vypis += (rdr.GetInt32(0) + " - " + rdr.GetString(1) + " - " + rdr.GetString(2) + " - " + rdr.GetString(3) + "\n");
vypisBlock.Text = vypis;
}
}
catch (MySqlException ex)
{
string chyba = "Error: {0}" + ex.ToString(); // doplnit (if = cislo chyby -> hlaska) místo šílenosti co to zobrazuje ted
vypisBlock.Text = chyba;
}
}
}
}
我希望应用程序指示整个表的内容现在只显示最后一行。
我该怎么做?
谢谢
答案 0 :(得分:2)
对于您正在设置vypisBlock.Text
的数据库中的每条记录,只会显示 last 记录。
创建一个字符串并分配一次XAML元素(在循环之后)。在执行大量的concaternation时使用StringBuilder
而不是字符串。
然而,更好的方法是使用DataGrid
,这是表格数据。您定义“行模板”,并使用数据绑定来填充。有很多例子,但链接的MSDN页面有一个合理的例子。
答案 1 :(得分:1)
您的代码会有更多可能的改进,但您遇到的基本问题是您将继续覆盖循环中的输出,这可以纠正,例如像这样:
var vypis = new StringBuilder();
while (rdr.Read())
{
vypis.AppendFormat("{0} - {1} - {2} - {3}{4}",
rdr.GetInt32(0), rdr.GetString(1), rdr.GetString(2),
rdr.GetString(3), Environment.NewLine);
}
答案 2 :(得分:1)
您在while循环中不断覆盖结果。
StringBuilder vypis = "";
while (rdr.Read())
{
vypis.AppendLine(string.Format("{0} - {1} - {2} - {3}",
rdr.GetInt32(0),
rdr.GetString(1),
rdr.GetString(2),
rdr.GetString(3));
}
vypisBlock.Text = vypis.ToString();
答案 3 :(得分:0)
知道了,但谢谢你的回复!
...
try
{
conn = new MySqlConnection(cs);
conn.Open();
string stm = "SELECT * FROM elsvo_zpravy";
MySqlCommand cmd = new MySqlCommand(stm, conn);
rdr = cmd.ExecuteReader();
string vypis = "";
while (rdr.Read())
{
vypis += (rdr.GetInt32(0) + " - " + rdr.GetString(1) + " - " + rdr.GetString(2) + " - " + rdr.GetString(3) + "\n");
}
vypisBlock.Text = vypis;
}
...
现在显示所有记录,每个记录都在新行上。