assume you are using templates, before you call databind, for the columns you don't want to the user to seeif (不是登陆用户)
{
DataGrid1.Columns[n1].Visible = false;
DataGrid1.Columns[n2].Visible = false;
}...
DataGrid1.Bind();
{
DataGrid1.Columns[n1].Visible = false;
DataGrid1.Columns[n2].Visible = false;
}...
DataGrid1.Bind();
然后对登陆的用户用session 或 cookie来存储标志。在列邦定时增加对session的一些判断就可以了。
protected System.Web.UI.WebControls.DataGrid dgView;//设置数据源,设定其他列
........
........
//设定要判定的列
if(Page.Session["userId"] != null && Page.Session["userId"] != "")
dgView.Columns.Add(this.HyperLinkColumn(......));
/绑定数据
dgView.DataBind();//获取链接列
public static HyperLinkColumn HyperLinkColumn(string DataTextField, string HeaderText, string NavigateUrl)
{
HyperLinkColumn Col = new HyperLinkColumn();
Col.HeaderText = HeaderText;
Col.DataNavigateUrlFormatString = NavigateUrl;
Col.DataTextField = DataTextField;
return Col;
}
<ItemTemplate>
会员意见(<%# CalMyTotal(Container.DataItem)%>)
</ItemTemplate>
</asp:TemplateColumn>int CalMyTotal(DataRowView drv)
{
int n = 0;
///
return n;
}
这段代码应该放在哪里啊?我把它放在DataField="<%# ((int)DataBinder.Eval(Container.DataItem,"F_CONS_DEAL")) == 1? "是" : "否"%>"好象没有用啊
<%@ Page language="c#" Codebehind="DataGrid[Columns]_Visible.aspx.cs" Src="DataGrid[Columns]_Visible.aspx.cs" AutoEventWireup="false" Inherits="Exam.DataGridColumns_Visible" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Lion互动网络--显示和隐藏DataGrid中的列 作者:Lion</title>
</HEAD>
<body MS_POSITIONING="FlowLayout">
<form id="Form1" method="post" runat="server">
<asp:Button id="ID_Show" runat="server" Text="显示列"></asp:Button>
<asp:Button id="ID_Hid" runat="server" Text="隐藏列"></asp:Button><FONT face="宋体"><BR>
</FONT>
列数:<asp:TextBox id="ID_Num" runat="server"></asp:TextBox>
<asp:DataGrid ID="ID_DataGrids" Runat="server" AutoGenerateColumns="False" BorderColor="#999999"
BorderStyle="None" BorderWidth="1px" BackColor="White" CellPadding="3" GridLines="Vertical">
<AlternatingItemStyle BackColor="Gainsboro"></AlternatingItemStyle>
<ItemStyle ForeColor="Black" BackColor="#EEEEEE"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#000084"></HeaderStyle>
<Columns>
<asp:BoundColumn DataField="id" HeaderText="编号ID">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="Title" HeaderText="标题">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="AddTime" HeaderText="加入时间" DataFormatString="{0:yyyy年MM月dd日}">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
</asp:BoundColumn>
<asp:EditCommandColumn Visible="False" ButtonType="LinkButton" UpdateText="" HeaderText="Edit" CancelText=""
EditText="Edit">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
</asp:EditCommandColumn>
</Columns>
</asp:DataGrid>
</form>
</body>
</HTML>
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;namespace Exam
{
/// <summary>
/// KillProcess 的摘要说明。
/// </summary>
public class DataGridColumns_Visible : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button ID_Hid;
protected System.Web.UI.WebControls.Button ID_Show;
protected System.Web.UI.WebControls.TextBox ID_Num;
protected System.Web.UI.WebControls.DataGrid ID_DataGrids;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
DataGridBind();
this.ID_Hid.Attributes["onclick"] = this.ID_Show.Attributes["onclick"] = "JavaScript: var num =document.all.item(\"ID_Num\").value; if(num==\"\"){alert('列数不能为空');return false;};if(isNaN(num)){alert('列数必须是数字');return false;};if(num<1 || num>3){alert('列数必须介于1-3之间');return false;}";
}
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.ID_Hid.Click += new System.EventHandler(this.ID_Hid_Click);
this.ID_Show.Click += new System.EventHandler(this.ID_Show_Click);
this.ID = "ID_DataGrid";
this.Load += new System.EventHandler(this.Page_Load); }
#endregion #region Function Custon /// <summary>
/// 绑定DataGrid
/// </summary>
private void DataGridBind()
{
System.Data.DataTable DT = new System.Data.DataTable("Process");
DT.Columns.Add("ID",typeof(int));
DT.Columns.Add("Title",typeof(string));
DT.Columns.Add("AddTime",typeof(DateTime));
DT.Columns[0].AutoIncrement = true;
DT.Columns[0].AutoIncrementSeed = 1;
DT.Columns[0].AutoIncrementStep = 1;
for(int i=0;i<10;i++)
{
System.Data.DataRow DR = DT.NewRow();
DR[1] = "欢迎光临Lion互动网络 "+i.ToString();
DR[2] = System.DateTime.Now.AddDays(i);
DT.Rows.Add(DR);
}
ID_DataGrids.DataSource = DT;
ID_DataGrids.DataBind();
DT.Clear();
DT.Dispose();
} #endregion
#region Button Click /// <summary>
/// 显示列
/// </summary>
/// <param name="sender"> 事件的源 </param>
/// <param name="e"> 事件处理程序接收一个 <see cref="System.EventArgs"/> 类型的参数,它包含与此事件相关的数据 </param>
private void ID_Show_Click(object sender, System.EventArgs e)
{
this.ID_DataGrids.Columns[int.Parse(ID_Num.Text)-1].Visible = true;
} /// <summary>
/// 隐藏列
/// </summary>
/// <param name="sender"> 事件的源 </param>
/// <param name="e"> 事件处理程序接收一个 <see cref="System.EventArgs"/> 类型的参数,它包含与此事件相关的数据 </param>
private void ID_Hid_Click(object sender, System.EventArgs e)
{
this.ID_DataGrids.Columns[int.Parse(ID_Num.Text)-1].Visible = false;
} #endregion }
}
{
DataGrid1.Columns[n1].Visible = false;
DataGrid1.Columns[n2].Visible = false;
}...
DataGrid1.Bind();
num:代表第几列
<asp:TemplateColumn>
<ItemTemplate>
会员意见(<%# CalMyTotal(Container.DataItem)%>)
</ItemTemplate>
</asp:TemplateColumn>int CalMyTotal(DataRowView drv)
{
int n = 0;
///
return n;
}
这段代码好象无法实现我需要的功能,我希望实现的是:datagrid的一列显示的是会员意见,用超级链接到其他的页面,而在列中显示的是"会员意见(*)"其中*代表的是另外一个表中查询到的某个条件的会员意见的条数,然后显示出来.例如"会员意见(13)"表示会员意见这个列中某行的会员意见有13条!