我有一个GridView,如下图所示,我想在其中显示SQL Server中存储过程的结果。取决于其参数的输入,存储过程返回具有不同列数的不同结果。但是它的前两列始终是measId和valSeq,它们在GridView中被视为DataKeyNames。我想显示存储过程中的所有可用列,但是measId和valSeq。相反,我想显示2个TemplateField。
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
DataSourceID="SqlDataSource1" Width="100%" BackColor="#DEBA84"
BorderColor="#DEBA84" BorderStyle="Solid" BorderWidth="1px" CellPadding="3"
CellSpacing="2" DataKeyNames="measId,valSeq"
onrowupdating="GridView_RowUpdating" Visible="False"
EmptyDataText="No data!" EnableModelValidation="True"
onrowdatabound="GridView1_RowDataBound">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="cbCheckAll" runat="server" OnClick="javascript:selectAll(this)" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="Checkbox1" runat="server" />
</ItemTemplate>
<ItemStyle Width="25px" />
</asp:TemplateField>
<asp:CommandField HeaderText="Action" ShowEditButton="True" />
</Columns>
<FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
<HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White"
Font-Names="Verdana" Font-Size="Small" HorizontalAlign="Left" />
<PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
<RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" Font-Names="Verdana"
Font-Size="X-Small" HorizontalAlign="Left" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
</asp:GridView>
我可以成功声明一个SqlDataSource来从存储过程中检索结果并将其绑定到GridView。 GridView显示TemplateFileds以及存储过程中的所有检索列。现在我想隐藏measId和valSeq列。但我找不到任何办法。似乎我无法访问自动绑定到GridView的字段。
答案 0 :(得分:4)
我终于找到了答案here。但是因为我想隐藏第3列,所以我不得不添加一个条件语句。因此,如果要隐藏3列,解决方案将如下:
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if(e.Row.Cells.Count > 2)
e.Row.Cells[2].Visible = false;
}
答案 1 :(得分:3)
使用GridView RowDataBound事件将列设置为不可见。
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[index].Visible = false;
}
0R
this.myGridview.Columns[0].Visible = false;
这里0是列索引
protected void GridView_PreRender(object sender, EventArgs e)
{
foreach (DataControlField column in GridView1.Columns)
if (column.HeaderText == "XXXXXXX")
column.Visible = false;
}
答案 2 :(得分:2)
<style type="text/css">
.hidden
{
display:none;
}
</style>
<Columns>
<asp:BoundField HeaderStyle-CssClass="hidden" DataField="TemplateID" HeaderText="Template ID"
ReadOnly="True" SortExpression="TemplateID" >
<ItemStyle CssClass="hidden"/>
</asp:BoundField>
<asp:BoundField DataField="TemplateName" HeaderText="Template Name"
SortExpression="TemplateName" />
</Columns>