【问题标题】:Hide DataList row based on value from web service根据来自 Web 服务的值隐藏 DataList 行
【发布时间】:2013-07-16 11:19:09
【问题描述】:

我正在从 Web 服务中检索一组值并使用这些值填充数据列表-

ActiveDataList.DataSource = ws.TermsReturnActive(sql);
ActiveDataList.DataBind();

如何根据值隐藏 dataList 的特定列, 例如

if(value == 1)
{ 
 //Hide Column 
}

但是,此操作必须隐藏与其并行的另一个 dataList 的同一行。 我可以通过从第一个中检索值来修改第二个 dataList 上的单元格 -

TextBox tb1 = (TextBox)sender;
        DataListItem item1 = (DataListItem)tb1.NamingContainer;

        TextBox txt1 = (TextBox)tData.Items[item1.ItemIndex].FindControl("tTextBox");

        string term = txt1.Text;

因此,如果我可以从单独的 dataList 行中检索一个值,我想我也可以调整它的可见性。

如何实现这一点,因为 Web 服务调用是在页面加载中完成的,所以我相信它必须在绑定 dataList 项时完成?

【问题讨论】:

    标签: c# asp.net web-services


    【解决方案1】:

    如果我是正确的,你应该在你的 aspx 文件中有这样的东西吗?:

    <asp:DataList ID="DataList1" runat="server" OnItemDataBound="DataList1_ItemDataBound"></asp:DataList>
    

    如您所见,您应该添加一个“OnItemDataBound”事件,您可以在其中检查您的值并根据需要隐藏项目。

    所以你可以这样反应并隐藏一些项目:

    protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
       {
           if (e.Item.ItemType == ListItemType.Item)
           {
               TextBox tbCurrentTextBox = (TextBox)e.Item.FindControl("tTextBox");
               if (DataList1.Items[e.Item.ItemIndex].ToString() == "1")
               {
                   e.Item.Visible = false;
               }
           }
       }
    

    【讨论】:

    • 这会带来 - 索引超出范围。必须是非负数且小于集合的大小。参数名称:索引。我确定我引用了正确的数据列表和控件,你有什么建议?
    • 看看我的回答我添加了一个检查当前项目是否是“项目”类型,这样你就不会收到错误。
    猜你喜欢
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    相关资源
    最近更新 更多