[英]WPF: C# How to get selected value of Listbox?
我正在嘗試獲取列表框的選定值。 當我實際嘗試LstGroup1.SelectedItem
時,我得到了值{ BoothID = "4", BoothName = "HP" }
,即使我嘗試從LstGroup1.SelectedValue
獲取值,輸出也是相同的。 現在我想獲取BoothID
即預期的輸出是4
但我無法得到。
我的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>
由於您使用匿名類型填充列表框,因此您別無選擇,而是將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:
}
這可能會解決您當前的問題,但是出於許多原因,我建議出於同樣的原因創建一個類。
你有沒有嘗試過 :
var Booth = (LstGroup1.SelectedItem);
string ID=Booth.BoothID;
string Name=Booth.BoothName:
我認為,您應該嘗試以下操作之一://編輯:僅當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()
});
您始終可以創建一個名為Booth的類來獲取對象格式的數據。 從我的角度來看, 動態不是正確的方法。 解決方案中有班級攤位后,即可運行
Booth Booth1 = LstGroup1.SelectedItem as Booth;
string BoothID1 = Booth1.BoothID;
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;
對於那些知道他們想要的類型或對象的人來說,代碼如下所示:
private void lboxAccountList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//Class object = (Class)listName.SelectedItem;
// object.getName or object.getSomeVariable or object.callMethod(object.getName)
Account account = (Account)lboxAccountList.SelectedItem;
MessageBox.Show(""+account.AccountNo+" "+account.Balance);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.