gpt4 book ai didi

mysql - 尝试在 ListView wpf 的列中分隔 2 个项目

转载 作者:行者123 更新时间:2023-11-29 03:30:58 25 4
gpt4 key购买 nike

我是 wpf 的新手...任何帮助将不胜感激。我用一个显示 MySQL 内容的 ListView 开始了一个小项目。到目前为止,除了其中包含 2 个项目的列外,我没有遇到任何问题。我需要在其自己的列中分隔每个项目。处理日期和时间很容易,但这超出了我的能力范围。

listview的显示是这样的(我还不能发图片):

日期 |时间 |来电显示 |从|到 |持续时间

2015 年 6 月 10 日 |22:45|“亚历克斯”<210555555>|101 |201|234

CallerID 列包含带有不同“”和<> 的两个值。我需要将 DateTime 分开。感谢您的帮助。

  <ListView x:Name="Datalist" Grid.Column="1" Grid.Row="4" 
ItemsSource="{Binding Path=DS}" Background="White" Foreground="Black" FontSize="16" Grid.ColumnSpan="4" FontFamily="Segoe UI" Margin="1,0,8,0">
<ListView.View>
<GridView AllowsColumnReorder="False">
<GridViewColumn Header="Date" DisplayMemberBinding="{Binding Path=calldate,StringFormat={}{0:dd MMMM yyyy}}"/>
<GridViewColumn Header="Time" DisplayMemberBinding="{Binding Path=calldate,StringFormat={}{0:HH:mm:ss}}"/>
<GridViewColumn Header="CallerID" DisplayMemberBinding="{Binding Path=clid}"/>
<GridViewColumn Header="From" DisplayMemberBinding="{Binding Path=src}"/>
<GridViewColumn Header="To" DisplayMemberBinding="{Binding Path=dst}"/>
<GridViewColumn Header="Duration" DisplayMemberBinding="{Binding duration}" />
</GridView>
</ListView.View>
</ListView>

private void OnLoad(object sender, RoutedEventArgs e)
{
string cs = @"server=192.168.1.123;userid=alex;
password=r3s3ll3r;database=asteriskcdrdb";

MySqlConnection conn = null;
MySqlDataReader rdr = null;

try
{
conn = new MySqlConnection(cs);
conn.Open();

string stm = "(SELECT * FROM cdr ORDER BY uniqueid DESC LIMIT 1000)";
mySqlDataAdapter = new MySqlDataAdapter(stm, cs);
mySqlDataAdapter.Fill(DS);
Datalist.ItemsSource = DS.DefaultView;

}
catch (MySqlException ex)
{
MessageBox.Show("Error: {0}", ex.ToString());

}
finally
{
if (rdr != null)
{
rdr.Close();
}

if (conn != null)
{
conn.Close();
}

}
}

最佳答案

考虑转向更完整的 View 模型方法。您可以创建一个 View 模型集合来定义每个条目的表示逻辑,而不是将您的 ItemsSource 直接绑定(bind)到 DataTable.DefaultView。例如,您可以定义一个 View 模型类,例如

public class PhoneCallViewModel
{
public Date CallDate { get; set; }
public string CallerId { get; set; }
// .... Expose properties for each column
}

这将为处理您当前的问题打开很多选项。例如,我们如何拆分来电显示字符串?您可以创建另一个 View 模型,如下所示

public class CallerIDViewModel
{
public string CallerName { get; set; }
public string CallerNumber { get; set; }
}

然后 PhoneCallViewModel 将公开一个 CallerIDViewModel 属性。在您的 OnLoad 方法中,您将创建这些 PhoneCallViewModel 对象的集合(最好是 ObservableCollection)并绑定(bind) ItemsSource 到它。然后,您可以简单地用两个新列替换 ListView 中现有的来电显示列。一个绑定(bind)到 CallerID.CallerName,第二个绑定(bind)到 CallerID.CallerNumber(假设 PhoneCallViewModel 上的属性名为 CallerID).

我省略了拆分原始调用者 ID 以及实例化集合的细节,因为这些是单独的实现问题。

关于mysql - 尝试在 ListView wpf 的列中分隔 2 个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30766037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com