【问题标题】:How to access other columns from DataSource Table in dropdown list?如何从下拉列表中的 DataSource Table 访问其他列?
【发布时间】:2014-03-10 08:54:21
【问题描述】:

我有一个包含 10 列的国家/地区表。我已经将 CityName 作为 DataTextField 分配给了我的 DropDownList,并将 Id 作为 DataValueField。现在在SelectedIndexChanged 上,我必须从CityCode 等其他列中获取值。我如何访问它?

ddlCity.DataSource = cboxTeam_DS.Tables["MyTable"];
ddlCity.DataTextField  = "CityName";
ddlCity.DataValueField= "Id";
ddlCity.DataBind();

SelectedIndexChanged 方法中,如何访问CityCode 列值?

【问题讨论】:

  • 您想获取所选城市的CityCode 吗?
  • 您可以通过传递下拉列表中选定的Id 从数据库中获取CityCode

标签: c# asp.net sql sql-server webforms


【解决方案1】:

我可以建议你两种方法

  1. 您可以再存储一个隐藏的下拉列表,其中包含您的 ID 和 CityCode。因此,每当您选择原始下拉列表时,请从此隐藏的下拉列表中选择适当的值。
  2. 第二种方法是,当您从 ddlCity.SelectedValue 获取 ID 时,您需要使用条件再次检索表,并以该值作为参考在表中搜索以获取城市代码。

我更喜欢你选择第一个。您还可以使用 javascript 在第一种情况下访问隐藏的下拉菜单。

【讨论】:

    【解决方案2】:

    这是我为解决这个问题而开发的解决方案,对我来说非常有效。

    我做的第一件事就是更改了我的数据库查询

    来自

    SELECT * FROM Cities ORDER BY CityName Asc;
    

    SELECT *, convert(nvarchar(10),id) + ',' + CityCode as idCode FROM Cities ORDER BY CityName Asc;
    

    它返回给我一个表,其中包含一个名为 idCode 的额外列。

    由于id 是int 而CityCode 是nvarchar,所以我转换了id 列并得到一个包含两列值的额外列。

    在我的代码中,我已将idCode 列分配给我的ddlCity.DataValueField

    ddlCity.DataSource = cboxTeam_DS.Tables["MyTable"];
    ddlCity.DataTextField  = "CityName";
    ddlCity.DataValueField = "idCode";
    ddlCity.DataBind();
    

    之后我使用逗号拼接将字符串拆分为idcode 到一个数组中。

    string[] strArray = this.ddlCity.SelectedValue.Split(',');
    

    然后通过访问索引在我想使用它的地方使用它。

    int myId = strArray[0];
    string myCode = strArray[1];
    

    【讨论】:

      【解决方案3】:

      您尚未将CityCode 列绑定到下拉列表。 dropdown 的数据保存在 ViewState 中,并且不知道其他列。在桌面中,我们可以从 ComboBox(下拉菜单)中获取对象,但在 asp.net 中我们不能。这可能是为了让 ViewState 尽可能小。

      您可以选择其中一种方法来完成您需要的工作。

      • 您可以获取id 并发送数据库调用以检索SelectedIndexChanged 中的CityCode

      • 您可以通过组合两列(如 id_CityCode)来制作 Value 列,然后提取您需要的内容。

      【讨论】:

      • 您可以通过组合两列如 id_CityCode 来制作 Value 列,然后提取您需要的内容。
      【解决方案4】:

      您可以直接从您的数据源获取

       int CityId = (int)ddlCity.SelectedValue;
          DataTable dt = cboxTeam_DS.Tables["MyTable"];
          string CityCode = (from DataRow dr in dt.Rows
                    where (int)dr["Id"] == CityId 
                    select (string)dr["CityCode"]).FirstOrDefault();
      

      【讨论】:

        【解决方案5】:

        我建议使用 ID,在数据库中再次检索您需要的字段。这样可以节省时间和精力。我就是这样解决的。

        【讨论】:

          猜你喜欢
          • 2022-08-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多