【问题标题】:ASP.NET DropDownList discrepancy between SQL Server ID column and DDL selectedindexSQL Server ID 列和 DDL selectedindex 之间的 ASP.NET DropDownList 差异
【发布时间】:2019-10-25 04:34:47
【问题描述】:

目前,我正在开发一个允许员工订购靴子的系统,其中部分流程需要特殊用户的批准才能完全处理订单。

用户应从下拉列表中选择未完成的订单,查看订单信息,并(在相关员工的批准下)提交订单。我注意到的是,如果您从加载到 DDL 的数据库中删除订单,或者将订单编辑到没有任何理由加载到 DDL 中的位置,则从 DDL 加载的 ListItem 会感到困惑和说“位置 0 处没有行”(参见下面的代码)。

原因在于 DDL 的数据加载到 DataTable 中的方式——然后加载到 ListItem 中。因为单个贷款的 ID 用于将所有贷款信息加载到 DataTable 中,所以该 ID 还负责充当 DDL 中的贷款索引。因此,编辑或删除外借会导致 DDL 中出现 ListItem 预计会被其他内容占用的空间。至少据我所知,这就是错误的来源。

此数据将加载到的面板中存在多个元素。在我试图规避“位置 0 处没有行”错误时,我尝试设置一个也等于 DDL 的 SelectedIndex 的整数。从那里,我尝试将该整数插入到 ListItem 中,但这只会导致相同类型的错误——Visual Studio 坚持认为该位置没有任何内容。

当有人在订单 DDL 中选择了某些东西后,他们将单击一个按钮,该按钮将打开一个包含所有订单信息的弹出窗口。以下是弹出窗口出现后发生的情况:

SqlCommand cmd = new SqlCommand("loanProc", sc);
cmd.CommandType = System.Data.CommandType.StoredProcedure;

string blNo = ddlBootLoanSel.SelectedIndex.ToString();

DataTable dt = CompC.LoadData("loanProc", sc, new string[] { "id" }, new string[] { blNo });

如前所述:贷款的 ID 正在加载到数据表中。 我还应该在这里提到 CompC 及其方法。该方法的工作方式是它接受以下参数:

  1. 要执行的存储过程
  2. SQL 连接字符串
  3. 将添加到存储过程的字符串数组;在这种情况下,如果我要更新相关表,我需要插入 ID,并且
  4. 字符串参数,如#3,将被添加到过程中。 CompC.LoadData 将从这里获取过程结果并将它们加载到表中。
ListItem li = new ListItem(dt.Rows[0][0].ToString(), dt.Rows[0][8].ToString());
ddlFinFullName.Items.Add(li);
lblFinPartNo.Text = dt.Rows[0][1].ToString();

// Can't use a Boolean here because this code will need to work with SQL Server
if (dt.Rows[0][2].ToString() == "1") 
    chkFinDiscount.Checked = true;
else
    chkFinDiscount.Checked = false;

lblFinACost.Text = dt.Rows[0][3].ToString();
lblFinDesc.Text = dt.Rows[0][4].ToString();
lblFinLastMod.Text = dt.Rows[0][5].ToString();

if (dt.Rows[0][6].ToString() == "")
    lblFinAmt.Text = "None";
else
    lblFinAmt.Text = dt.Rows[0][6].ToString();

lblFinTP.Text = dt.Rows[0][7].ToString();

if (dt.Rows[0][8].ToString() == "1")
    chkFinHF.Checked = true;
else
    chkFinHF.Checked = false;

sc.Close();
lblFinID.Text = blNo;

我希望这会加载所选人员的所有必要信息 - 但相反(如果它没有出错),弹出窗口会显示此人的姓名错误,除非所选人员在下面的索引一个数字上被删除的贷款。对于该会话的其余部分(再次:假设弹出窗口没有出错),每当我为任何其他人打开弹出窗口时,一个错误的人的名字将始终出现在弹出框中。 我还认为每次按下主动按钮时 ListView 都没有刷新可能存在问题,但我发现没有任何方法可以使用单个命令清除 ListView - 无论如何,这样的功能会无论如何,在这种情况下是不必要的。

【问题讨论】:

    标签: c# asp.net sql-server visual-studio drop-down-menu


    【解决方案1】:

    我发现了一个错误并修复了它。

    int bIndex = ddlBootLoanSel.SelectedIndex;
    
    string blNo= ddlBootLoanSel.Items[bIndex].ToString()
    

    string blNo= ddlBootLoanSel.SelectedItem.ToString()
    

    【讨论】:

    【解决方案2】:

    主要问题在于这里的这一行:

    string blNo = ddlBootLoanSel.SelectedIndex.ToString();
    

    SelectedIndex 实际上应该设置为 SelectedValue 或 SelectedItem.Value。这将获取订单的 ID 并将其设置在下拉列表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-09
      • 2010-09-05
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多