繁体   English   中英

Asp.Net C#GridView第三列中的第一个单元格为空,但数据存在

[英]Asp.Net C# GridView first cell in third column is empty but data exists

嗨,谢谢你。

我有一个有四列的gridview。 第四列是根据一组正常工作的条件隐藏或显示的。 但是,当显示该表时,即使在数据绑定上它清楚地表明它具有文本,但最后一列中的第一个单元格也不显示任何文本。 因此,gridview显示如下数据:

   Name         Address           Zip Code
 X H. Smith     123 Raton Ave. 
 X A. Rally     345 6th St        98453
 X B. Holcomb   876 Harrison Blvd 56321

OnRowDataBound看起来像这样:

protected void gvAddresses_OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //This test evaluation string showed the correct data for every row
        //string myvalue = DataBinder.Eval(e.Row.DataItem, "ZipCode").ToString();
        if (user.State == (int)States.California) 
            gvAddresses.Columns[3].Visible = true;

    }
}

绑定似乎没有任何问题,当我通过gridview调试时,每一行都按照我的预期进行处理。 这是gridview:

 <asp:GridView runat="server" ID="gvAddresses" CssClass="TableFormat gvMargin"       Width="100%" AutoGenerateColumns="false" 
      OnRowCommand="gvAddresses_OnRowCommand" OnRowDeleting="gvAddresses_OnRowDeleting" OnRowDataBound="gvAddresses_OnRowDataBound">
      <EmptyDataTemplate>
           <div style="text-align: center;">No addresses available.</div>
      </EmptyDataTemplate>
      <Columns>
      <asp:TemplateField HeaderText="" ItemStyle-HorizontalAlign="Center">
           <ItemTemplate>
                 <asp:LinkButton ID="lnkRemoveAddress" runat="server" OnClientClick="if(!confirm('Are you sure you want to delete this record?')) return ;"  style="color: maroon; font-weight: bold;" Text="X" CommandName="Delete" CommandArgument='<%# Eval("AddressCode") %>'></asp:LinkButton>
           </ItemTemplate>
      </asp:TemplateField>
      <asp:BoundField DataField="Name" HeaderText="Name" />
      <asp:BoundField DataField="Address" HeaderText="Address" />
      <asp:BoundField DataField="ZipCode" HeaderText="Zip Code" Visible="False"/>
      </Columns>
  </asp:GridView>

我还能如何发现第一个单元的状况?

第一个问题是:您正在检查每一行并将整个列设置为可见或不重复。 进行数据绑定之前,应先检查状态,因为它是用户对象,我建议在preinit上进行操作。

我建议您从标记中删除visible = false。 当将visible设置为false时,控件/对象不会呈现到HTML中。 如果您从标记中删除可见性属性,并在适当的时间在后面的代码中分配该值,则很可能会解决您的问题。

    protected override void OnPreInit(EventArgs e)
    {
        base.OnPreInit(e);

        if (!postback)
        {
            gvAddresses.Columns[3].Visible = User.State == (int)States.California;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM