我正在尝试获取列表框的选定值。当我实际尝试LstGroup1.SelectedItem
时,我得到值{ BoothID = "4", BoothName = "HP" }
,即使我尝试从LstGroup1.SelectedValue
获取值,输出也是相同的。现在我想获取BoothID
,即预期输出为4
,但我无法获取。{/ p>
我的ListBox
名称为LstGroup1
。
public List<object> BoothsInGroup1 { get; set; }
// Inside the Constructor
BoothsInGroup1 = new List<object>();
//After Fetching the value add
BoothsInGroup1.Add(new { BoothID = da["BoothID"].ToString(), BoothName = da["BoothName"].ToString() });
//Now here I get
var Booth = (LstGroup1.SelectedItem);
//Output is { BoothID = "4", BoothName = "HP" }
// Expected Output 4
建议我怎么做。
public partial class VotingPanel : Window
{
public List<object> BoothsInGroup1 { get; set; }
public VotingPanel()
{
InitializeComponent();
DataContext = this;
BoothsInGroup1 = new List<object>();
//Connection is done
SqlConnection con = new SqlConnection(ConnectionString);
con.Open();
FieldNameCmd.CommandText = "SELECT * FROM Booth b, BoothGroup bg where bg.GroupID=b.GroupID;";
IDataReader da = FieldNameCmd.ExecuteReader();
while (da.Read())
{
if (Group1Name.Text == da["GroupName"].ToString())
{ // Adds value to BoothsInGroup1
BoothsInGroup1.Add(new { BoothID = da["BoothID"].ToString(), BoothName = da["BoothName"].ToString() });
}
}
}
private void BtnVote_Click(object sender, RoutedEventArgs e) // on Click wanted to find the value of Selected list box
{
if (LstGroup1.SelectedIndex >= 0 && LstGroup2.SelectedIndex >= 0)
{
var Booth = (LstGroup1.SelectedItem);
//Few things to do
}
}
}
<ListBox Grid.Row="1"
Name="LstGroup1"
ItemsSource="{Binding BoothsInGroup1}"
Margin="5,1">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding BoothID}"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
FontSize="15"
FontWeight="ExtraBold"
Margin="5,3"
Grid.Column="1" />
<TextBlock Text="{Binding BoothName}"
Grid.Column="1"
VerticalAlignment="Center"
FontWeight="ExtraBold"
FontSize="30"
Margin="15" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:5)
因为您使用匿名类型来填充列表框,所以您没有选项,而是object
类型以将SelectedItem
强制转换为。其他方法可能包括反射以提取字段/属性值。
但如果您使用的是C#4或更高版本,则可以使用dynamic
if (LstGroup1.SelectedIndex >= 0 && LstGroup2.SelectedIndex >= 0)
{
//use dynamic as type to cast your anonymous object to
dynamic Booth = LstGroup1.SelectedItem as dynamic;
//Few things to do
//you may use the above variable as
string BoothID = Booth.BoothID;
string BoothName = Booth.BoothName:
}
这可能会解决您当前的问题,但出于多种原因,我建议为此创建一个类。
答案 1 :(得分:1)
你试过了吗?
var Booth = (LstGroup1.SelectedItem);
string ID=Booth.BoothID;
string Name=Booth.BoothName:
答案 2 :(得分:1)
我认为,您应该尝试以下方法之一://编辑:如果Booth
是类/结构
var myBooth = LstGroup1.SelectedItem as Booth;
String id =myBooth.BoothID;
String name=myBooth.BoothName:
或使用不同类型的通用列表:
public List<Booth> BoothsInGroup1 { get; set; }
....
var myBooth = LstGroup1.SelectedItem;
String id =myBooth.BoothID;
Stringname=myBooth.BoothName:
如果Booth
还不是一个类,请添加一个新类:
public class Booth
{
public int BoothID { get; set; }
public String BoothName { get; set; }
}
所以你可以在你的通用列表中使用它,你可以在数据库读取之后填写它
BoothsInGroup1.Add(new Booth
{
BoothID = Convert.ToInt32(da["BoothID"]),
BoothName = da["BoothName"].ToString()
});
答案 3 :(得分:1)
您始终可以创建一个名为Booth的类来获取对象格式的数据。从我的观点来看,动态不是正确的做法。一旦在解决方案中有了类展位,就可以运行
Booth Booth1 = LstGroup1.SelectedItem as Booth;
string BoothID1 = Booth1.BoothID;
答案 4 :(得分:0)
public List<object> BoothsInGroup1 { get; set; }
BoothsInGroup1 = new List<object>();
BoothsInGroup1.Add(new { BoothID = da["BoothID"].ToString(), BoothName = da["BoothName"].ToString() });
var Booth = (LstGroup1.SelectedItem);
var output = Booth.BoothID;