如何根据条件绑定GridView列:county为Other时取county_other值
解决方案
你可以选择两种方案实现需求,分别是SQL查询层面预处理,或者GridView前端绑定层面做判断:
方案1:SQL查询层面合并字段(推荐,性能更优,代码改动最少)
直接在SqlDataSource的SELECT语句中通过条件判断生成最终要显示的county字段,不需要修改GridView的其他交互逻辑:
- 把原SELECT语句中的
county, county_other替换为如下条件逻辑:
CASE WHEN county = 'Other' THEN county_other ELSE county END AS county
如果需要兼容county为空的场景,可以调整为 CASE WHEN ISNULL(county,'') = 'Other' THEN ISNULL(county_other,'') ELSE ISNULL(county,'') END AS county
2. 原GridView的BoundField不需要做任何修改,直接沿用你现有的绑定代码即可。
修改后的SELECT语句片段示例:
SELECT id, ca_name, cp_title, cp_firstname, cp_lastname, cp_credentials, contact_firstname, contact_lastname, address, city, STATE, zipcode, CASE WHEN county = 'Other' THEN county_other ELSE county END AS county, county_other, phone, fax, tp_adults, tp_pediatrics,tp_wh, tp_family, tp_other, other, date_created, date_contract, date_memorandum, comments, ca_type, recent FROM clinical_agency -- 后续LEFT JOIN、WHERE、ORDER BY逻辑保持不变
方案2:GridView模板字段层面做判断(不需要修改SQL查询)
把原有的BoundField替换为TemplateField,在绑定的时候做条件判断:
- 替换原GridView的county绑定代码为如下内容:
<asp:TemplateField HeaderText="County" SortExpression="county" HeaderStyle-ForeColor="White" HeaderStyle-BackColor="#093145" ItemStyle-Wrap="False"> <ItemTemplate> <%# Eval("county").ToString() == "Other" ? Eval("county_other") : Eval("county") %> </ItemTemplate> </asp:TemplateField>
如果要处理NULL值,可以调整为 <%# (Eval("county") ?? "").ToString() == "Other" ? (Eval("county_other") ?? "") : (Eval("county") ?? "") %>
内容的提问来源于stack exchange,提问作者cflasrado
相关产品推荐
相关产品推荐

