在C#(WPF)中显示来自mysql的整个表

时间:2014-10-22 07:57:43

标签: c# mysql wpf database visual-studio

我正在尝试很长时间,但我不能这样做。

我有这个简单的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;

            }

        }

    }
}

我希望应用程序指示整个表的内容现在只显示最后一行。

我该怎么做?

谢谢

4 个答案:

答案 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;

            }
...

现在显示所有记录,每个记录都在新行上。