我创建了listview
我需要在textBox
点击编辑按钮时显示所选项目,我的代码显示以下错误。
PresentationFramework.dll中出现未处理的“System.ArgumentOutOfRangeException”类型异常
附加信息:指定的参数超出了有效值的范围。
<ListView x:Name="lstvUnit" HorizontalAlignment="Left" Height="149" Margin="10,192,0,0" VerticalAlignment="Top" Width="321">
<ListView.View>
<GridView>
<GridViewColumn Header="ID" Width="50" DisplayMemberBinding="{Binding Path=Id}" />
<GridViewColumn Header="Unit" Width="150" DisplayMemberBinding="{Binding Path=name}"/>
<GridViewColumn Header="Edit" Width="60">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Button x:Name="btnEdit" Content="Edit" Width="50" CommandParameter="{Binding}" HorizontalContentAlignment="Right" Style="{StaticResource NewImg}" Cursor="Pen" Foreground="Blue" Click="btnEdit_Click"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
cs代码如下所示
DataRowView item = lstvUnit.Items.GetItemAt(lstvUnit.SelectedIndex) as DataRowView;
txtUnit_Name.Text = item[0].ToString();
答案 0 :(得分:1)
这只是说项目没有0的索引。你确定你不只需要item.ToString()吗? GetItemAt()听起来应该只返回一个项目,而不是它们的集合。如果您尝试访问item变量的子项,请尝试item.subitems [0]
答案 1 :(得分:1)
您是否检查了lstvUnit.SelectedIndex>=0
中是否GetItemAt
,所以如果选择了任何项目。
答案 2 :(得分:1)
你的异常是
由于您的selectedIndex为-1,因此在PresentationFramework.dll'异常中出现'System.ArgumentOutOfRangeException'。
将selectedIndex设置为Listview
中xaml
中的某个值为“1”,然后不会抛出异常。
此外,点击事件将针对按钮触发。不要以为当您点击“修改”按钮时,您选择了特定的ListviewItem
。该事件首先在子项目中注册,如果您希望通过父项触发,则需要在事件触发器上设置e.Handled=false
。
还有一个问题是您正在将项目转换为DataRowView,这是错误的。您需要将其强制转换为Collection类类型,然后使用该项。它只返回一个项目
item[0]
错了。
答案 3 :(得分:1)
一些事情。
由于您使用的是DataRowView
,因此无法使用索引值,因为它未返回集合。此外,您不能简单地将整行转换为字符串,因为该行包含列等。
您可以格式化自己的字符串,并使用对象的属性名称访问行的每列中的值。此外,您还应该进行错误检查。
if (lstvUnit.SelectedIndex >= 0)
{
var item = lstvUnit.Items.GetItemAt(lstvUnit.SelectedIndex) as DataRowView;
if (item != null)
{
xtUnit_Name.Text = string.Format("{0} {1}", item["Id"], item["name"];
}
}
答案 4 :(得分:-1)
我得到了上面的问题解决方案。
if (lstvUnit.SelectedIndex >= 0)
{
DataRowView item = lstvUnit.Items.GetItemAt(lstvUnit.SelectedIndex) as DataRowView;
txtUnit_Id.Text = item[0].ToString();
txtUnit_Name.Text = item[1].ToString();
}