从ListView中选择时出现System.IndexOutOfRangeException

时间:2019-07-16 22:10:02

标签: c#

我到处都在寻找解决方案,但似乎无法完成这项工作。我正在查询数据库以填充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");
    }
}

0 个答案:

没有答案