![](/img/trans.png)
[英]How to programatically select the data from GridView1's first row 4th column cell on page load and save it to a variable in C# asp.net
[英]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.