当在 c# Xamarin 上显示来自 db 的 ListView 数据时,有没有办法从屏幕中删除 System.Collection.Generic 消息而不是字符串

Posted

技术标签:

【中文标题】当在 c# Xamarin 上显示来自 db 的 ListView 数据时,有没有办法从屏幕中删除 System.Collection.Generic 消息而不是字符串【英文标题】:Is there a way to remove System.Collection.Generic message from screen instead of string when display ListView data from db on c# Xamarin 【发布时间】:2021-03-07 17:32:57 【问题描述】:

我希望当用户单击我的第一个 listView 时显示第二个 listview 与来自数据库的不同数据,但我看到此消息:"System.Collections.Generic.List'1[System..."

当我使用调试器时,一切都很好..我从日期库中看到数据..

我的第二个列表视图如下所示:

           <StackLayout>
              <ListView x:Name="MeteoView"
                        ItemsSource="Binding Forecast"
                        HeightRequest="100"
                        IsVisible="false">
                <ListView.ItemTemplate>
                  <DataTemplate>
                    <TextCell 
                        Text="Binding DisplayRun" />
                  </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackLayout>

我的c#代码连接db,执行过程并显示数据如下:

 public class ForecastData
    
        public string DisplayRun  get; set; 
    

    ObservableCollection<ForecastData> MeteoData = new ObservableCollection<ForecastData>();
    public ObservableCollection<ForecastData> Forecast  get  return MeteoData;  

    void listView_ItemSelected(System.Object sender, Xamarin.Forms.SelectedItemChangedEventArgs e)
        

        string str = ((Contacts)listView.SelectedItem).Place;

        string substr = str.Substring(str.Length - 5);

        searchBar.Placeholder = str;

        server = "ip-to-db";
        database = "db-name";
        uid = "user";
        password = "pass";
        string connectionString;
        connectionString = "SERVER=" + server + ";" + "DATABASE=" +
        database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
        connection = new mysqlConnection(connectionString);


        List<string> Run = new List<string>();
        
        
        try
        
            connection.Open();
            var cmd = new MySqlCommand();
            cmd.Connection = connection;
            MySqlCommand command = new MySqlCommand($"CALL `get_all_data`(substr)", connection);

            MeteoView.IsVisible = true;
            MeteoView.ItemsSource = MeteoData;

            using (MySqlDataReader reader = command.ExecuteReader())
            
                while (reader.Read())
                

                    Run.Add(reader[0].ToString()); 

                    MeteoData.Add(new ForecastData  DisplayRun = $"Run" );
                
            
            connection.Close();
        

        catch (Exception ex)
        
            LabelSQL.Text = (ex.ToString());
               
    

所以在我的显示模拟器上,我在 listView 中看到了这个:

listView

Debugger

【问题讨论】:

【参考方案1】:

这与您今天早些时候提出的问题基本相同。默认情况下ToString 将返回类的名称。您正在将 DisplayRun 设置为 List&lt;string&gt; 的内容

List<string> Run = new List<string>();

Run.Add(reader[0].ToString()); 
MeteoData.Add(new ForecastData  DisplayRun = $"Run" );

基本相同

DisplayRun = Run.ToString();

【讨论】:

你的回答将如何帮助我解决同样的问题? 我正在解释为什么会这样。我无法告诉您如何解决它,因为我对您的要求或您正在使用的数据一无所知。本质上,您试图在 单个标签 中显示 List 数据,这通常是行不通的。我怀疑你真正想要的是MeteoData.Add(new ForecastData DisplayRun = reader[0].ToString() );,但这只是猜测

以上是关于当在 c# Xamarin 上显示来自 db 的 ListView 数据时,有没有办法从屏幕中删除 System.Collection.Generic 消息而不是字符串的主要内容,如果未能解决你的问题,请参考以下文章

C# Xamarin 没有收到来自 HttpClient 的响应

在 Xamarin C# 中选择对 Sqlitie DB 的异步原始查询的问题

使用 xamarin.forms 跨平台 C# 在设备日历上设置提醒

来自原生 iOS 的 Unity AR 视图的屏幕截图

Xamarin.Forms:应用程序不在页面上显示元素

ActiveX C# 应用程序的问题