oushikruu Ответов: 1

Как привести listview в пользовательский класс объектов


I am trying to build a windows' application using Visual Studio code. I am trying to cast a Listview into my object, so I can access my public members.


public class User
{
    public string ID { get; set; }
    public int number{ get; set; }

    public string name{ get; set; }

    public string  price{ get; set; }

    public string Gesamt { get; set; }


}

private void Confirm_Click(object sender, RoutedEventArgs e)
{
     bool found = false;
     string key = InputTextBox.Text;
     for(int count = 0; count < ListView1.Items.Count ; count++)
        {

                   if ( ((User)ListView1.Items[count]).ID== key ) //it worked before...
                    {
                        found = true;
                        int current = ((User)ListView1.Items[count]).number;
                        current++;
                        ((User)ListView1.Items[count]).number= current;
                    }
                }

 }





Это код для получения данных из XML
public void CreateConnection()
    {
         try
        {
            string ConnStr = ConfigurationManager.ConnectionStrings["Restaurant.Properties.Settings.Restaurant_DatabaseConnectionString"].ConnectionString;
            Conn = new SqlConnection(ConnStr);
        }
        catch(SqlException se)
        {

        }

    }

    private void getAgentInfo( string KeyID)//"key" is your search paramter inside database
    {
        CreateConnection();
        try
        {
           Conn.Open();
           if(Conn.State.HasFlag(ConnectionState.Open))
          {
            Console.WriteLine("Testing Check");
           }
         string sqlquery = "SELECT * FROM Speise WHERE KeyID = @KeyID";

        SqlCommand command = new SqlCommand(sqlquery, Conn);
        SqlDataReader sReader;

        command.Parameters.Clear();
        command.Parameters.AddWithValue("@KeyID", KeyID);
        sReader = command.ExecuteReader();

        while (sReader.Read())
        {
            private_speise = sReader["SpeiseName"].ToString(); //SqlDataReader

            private_preis = sReader["Preis"].ToString();

        }

        }
        catch(SqlException e)
        {


        }
        finally
        {
            Conn.Close();
        }
    }


Что я уже пробовал:

Я думаю, что это произошло потому, что я использовал sql server (код Viusal studio). Первые несколько раз он работал с одним и тем же кодом, но после этого больше не позволял мне бросать. Я совершенно не понимаю, почему это больше не работает. Может кто-нибудь мне помочь, я действительно заблудился ...

1 Ответов

Рейтинг:
6

OriginalGriff

Что ж... вы не должны использовать a while чтобы читать из вашей БД, если вы специально не читаете несколько элементов - поскольку вы указываете только одно значение идентификатора в своем выборе, вы должны проверить, что возвращается только одна строка, а не пытаться зацикливаться на нескольких строках.
Кроме того, не используйте SELECT * FROM чтобы получить данные - всегда указывайте интересующие вас столбцы. Отчасти для того, чтобы он был более эффективным, а отчасти потому, что он помогает повысить надежность при изменении вашей базы данных.

Но вы, похоже, не делаете ничего полезного с этими данными, а если и делаете, то не показали нам, что именно.

Мы также не можем видеть, куда вы помещаете данные в свой ListView, поэтому мы понятия не имеем, что он на самом деле содержит. Но если раньше это работало, а теперь остановилось, то, вероятно, в какой-то момент Вы поместили пользовательские экземпляры в свой ListView и больше этого не делаете. И если ListView не содержит объектов, которые являются экземплярами пользователя (или классом, производным от User), то вы вообще не можете привести что-либо к пользователю, так же как вы можете привести Fiat 500 как Bugatti Veyron и ожидать, что он будет делать 430 км / ч...

Итак, посмотрите на то, что вы помещаете в ListView, и определите, к чему вы можете привести элементы в результате.


oushikruu

Большое вам спасибо за помощь! Я проверю это завтра снова!