【问题标题】:Show entire table from mysql in C# (WPF)在 C# (WPF) 中显示来自 mysql 的整个表
【发布时间】:2014-12-17 14:58:10
【问题描述】:

我尝试了很长时间,但我做不到。

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

            }

        }

    }
}

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

我该怎么做?

谢谢

【问题讨论】:

    标签: c# mysql wpf database visual-studio


    【解决方案1】:

    对于您正在设置vypisBlock.Text 的数据库中的每条记录,因此只会显示最后条记录。

    创建单个字符串并分配一次 XAML 元素(在循环之后)。并在执行大量连接时使用StringBuilder 而不是字符串。

    不过最好使用DataGrid,它用于表格数据。您定义一个“行模板”,并使用数据绑定来填充。例子很多,但链接的 MSDN 页面有一个合理的例子。

    【讨论】:

      【解决方案2】:

      你在 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();
      

      【讨论】:

      • 现在我也必须弄清楚:D
      • 如果您还不够了解,我可以提供一些额外的信息
      【解决方案3】:

      你的代码会有更多可能的改进,但你所追求的基本问题是你不断覆盖循环中的输出,这可以被纠正,例如像这样:

      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);
      }
      

      【讨论】:

        【解决方案4】:

        知道了,谢谢回复!

        ...
                    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;
        
                    }
        ...
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-04-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-28
          • 2016-08-26
          • 2014-10-15
          相关资源
          最近更新 更多