0

我有一个包含文本框、下拉列表和网格视图的 ASP.NET 页面。填写表单有两种方式,一种是当用户从gridview中选择一行时,单元格中的值会填充到文本框和下拉列表中,另一种是用户可以直接将数据输入到表单中。这有助于从我的数据库中添加、删除和更新记录。我的下拉列表和 gridview 填充了页面加载事件中 sql 语句中的值...

DROPDOWNLIST:
 dt = dal.FillDataTable(dbType.SqlServer, "SELECT V_VendorNo + ' | ' + V_VendorName FROM VendorTbl")
    ddlVendorEncum.DataSource = dt
    ddlVendorEncum.DataTextField = dt.Columns.Item(0).ToString
    ddlVendorEncum.DataValueField = dt.Columns.Item(0).ToString
    ddlVendorEncum.DataBind()

GRIDVIEW:
dts = dal.ExecuteSelectStoredPro(dbType.SqlServer, "EncumBugSearch", "@year", lblDef_FY.Text)
    gvEncumbered.DataSource = dts
    gvEncumbered.DataBind()

因为下拉列表是表中两列的串联,所以当我在 gridview 中选择一行时,该值不会用所选值填充下拉列表。有没有办法进行反向类型连接以填充下拉列表?我试过这个:

ddlVendorEncum.Text = gvEncumbered.SelectedRow.Cells(1).ToString

这是我填充文本框的方式,但出现错误。

4

2 回答 2

0

你可以使用

string s = dt.Columns.Item(0).ToString().Split("|".ToCharArray());

然后使用数组中的第一项(s[0]),但这是困难的方法。有一种更简单的方法。


改变

SELECT V_VendorNo + ' | ' + V_VendorName FROM VendorTbl

SELECT V_VendorNo + ' | ' + V_VendorName, VendorNo FROM VendorTbl

然后将 DataValueField 设置为查询返回的第二个字段。

ddlVendorEncum.DataTextField = dt.Columns.Item(0).ToString 
ddlVendorEncum.DataValueField = dt.Columns.Item(1).ToString 

(假设 VendorNo 是主键。)

于 2012-06-28T13:05:37.037 回答
0

我认为您需要在 sql 语句中使用两种不同的数据类型时进行 CAST

SELECT CAST(V_VendorNo AS Char(10)) + ' | ' + V_VendorName FROM VendorTbl

我假设 V_VendorNo 在您的数据库中是 Int 类型

试试看。

于 2012-06-28T13:16:04.003 回答