我到处都在寻找解决方案,但似乎无法完成这项工作。我正在查询数据库以填充ListView。当用户选择一行时,与该行有关的信息将显示在文本字段中。我将代码包装在if(listview!= null && listview.SelectedItems.Count> 0)周围,这虽然有所帮助,但是每次单击第一行仍会导致错误:System.IndexOutOfRangeException:'位置0处没有行。”
尽管填充了列表,但第一行也不返回任何数据。
这是我目前的代码:
string selectPackageQuery = @"SELECT PackageId, PkgName, PkgStartDate, PkgEndDate, PkgDesc, PkgBasePrice, PkgAgencyCommission FROM Packages WHERE PackageId = @PackageId";
SqlCommand sqlCommand = new SqlCommand(selectPackageQuery, con);
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
using (sqlDataAdapter)
{
if (listview != null && listview.SelectedItems.Count > 0)
{
sqlCommand.Parameters.AddWithValue("@PackageId", listview.Items.IndexOf(listview.SelectedItems[0]));
DataTable OrderDataTable = new DataTable();
sqlDataAdapter.Fill(OrderDataTable);
// variables
string pkgName = Convert.ToString(OrderDataTable.Rows[0]["PackageId"]);
string pkgDesc = Convert.ToString(OrderDataTable.Rows[0]["PkgDesc"]);
DateTime startDate = Convert.ToDateTime(OrderDataTable.Rows[0]["PkgStartDate"]);
DateTime endDate = Convert.ToDateTime(OrderDataTable.Rows[0]["PkgEndDate"]);
double pkgPrice = Convert.ToDouble(OrderDataTable.Rows[0]["PkgBasePrice"]);
double pkgComm = Convert.ToDouble(OrderDataTable.Rows[0]["PkgAgencyCommission"]);
packageName.Text = pkgName;
packageStartDate.Text = startDate.ToString("MM/dd/yyyy");
packageEndDate.Text = endDate.ToString("MM/dd/yyyy");
packageDescription.Text = pkgDesc;
packageBasePrice.Text = pkgPrice.ToString("C");
packageCommission.Text = pkgComm.ToString("C");
}
}