2010-02-12 94 views
3

我有两个表可以映射到彼此的唯一ID(一个表来自我的应用程序之外的数据库,但有关于我跟踪的相同实体的信息)。我想提供一个用于将“我的”记录与“其他”记录链接的UI,因此我可以将“其他”ID存储在我的表中以获得匹配记录。简而言之,关键UI元素是一个下拉列表,显示“other”表中可用的(即尚未链接的)记录。GridView的EditItemTemplate中“未使用”项目的绑定DropDownList加上当前行项目?

我有一个gridview用于在每行中显示“我的”记录,再加上一列显示“其他”表中链接记录的某些信息(如果有的话)。该数据是关于建筑和性质,所以它可能是这样的:

Building1 Dallas TX Building1_Dallas_TX 
Building2 Memphis TN Bldg2_Memphis_TN 
Building3 Denver CO 
Building4 Seattle WA 
Building5 Boston MA Building5_Boston_MA 

,其中前3列显示从“我”表中的一些信息,最后一个显示来自“其他”表中的匹配记录,这些记录已经被链接,否则就是没有建立链接的空白。我的实际gridview有“我的”表中更多的列,但这足以说明需求。

当单击编辑(未显示)行时,我希望能够编辑所有4列。前3个是文本框;最后一列应该是一个下拉列表,显示来自“其他”表的所有未连接的记录,加上“未分配”选项(作为列表中的第一项),因此记录可以“取消关联”或仅保留未分配,加上(对于那些已经建立链接的行)链接的项目(它是“使用”,但它需要在那里,所以他们可以继续使用它)。

我可以在GridView的RowEditing事件的代码隐藏中正确地填充下拉列表(除了在AppendDataBoundItems选项设置为true的情况下将.aspx添加为.aspx的Unassigned项目),我可以设置正确的SelectedValue在ddl的DataBound事件上,但在回发点击更新行时,ddl中没有任何项目(除了Unassigned项目),因此链接总是被清除。如果我通过直接编辑我的表来手动设置链接,则所有内容都会进入编辑模式 - ddl中包含正确的项目,并且它会预先选择正确的项目,但在更新回发中全部丢失。我已经尝试在页面循环的不同阶段重新绑定ddl,但显然我不太清楚该循环的好处,因为我无法弄清楚如何让用户选择的项目更新我的表格。

我也试着用SqlDataSource SelectCommand填充ddl,但没有运气,包括当前链接的记录在另一个数据库中的ID(尽管它在“我的”表中可用并且我将它设置为GridView DataKey,并将其作为ControlParameter添加到SqlDataSource的SelectParameters中。没有ddl项目列表中的当前链接记录,我无法保留现有链接。

我暂时不会发送代码示例 - 这个消息已经太长了 - 希望从我所描述的解决方案中明显看出......我不认为我的目标很奇怪,但我愿意以其他方式被说服。

很多th预先安排!

克里斯

回答

0

好,因为也许你已经做了什么,我要表明我不会进入细节的代码。

对于最后一列,下拉列表中,您必须执行SQL语句来获取未链接的项目。使用“WHERE xx NOT IN”。对于“未分配”选项,只需在上述相同代码范围内将项目添加到列表中即可。

下一步是手动处理GridView的编辑事件。插入,更新和删除。

我认为这样你就不会有问题。

+0

虽然答案在细节上不长,但大概是我如何进行的。更详细地说: – GISmatters 2014-09-23 21:09:38

+1

这大概是我如何进行的。具体来说,我在GridView的RowEditing处理程序中指定下拉的SelectCommand SQL,而不是声明式地组装未链接的记录,再加上现有的链接(如果有的话)以及未分配的选项;这些选项满足数据绑定是否已选择链接。自从我发布以来,我已经有很长一段时间了,所以我不是100%确定的,但我认为当我切换到SQL而不是AppendDataBoundItem来处理“未分配”项目时,回发时(几乎)空白下拉列表的问题就消失了。 。 – GISmatters 2014-09-23 21:18:32

相关问题