高分求DataGrid解决办法!

greenhill 2004-08-14 10:16:31
我使用DataGrid来显示某个表的数据,但是这个DataGrid不是每个列都和数据库绑定的,其中有几列我希望能做为不用绑定数据表字段的列,这几列是超级链接列,我的问题是我希望这些超级链接是登陆用户才可以看得到的,而不是这个用户的看到的就是空白的,没有超级链接列!请问我该怎样对DataGrid中某列进行这种判断
...全文
166 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
pingnt 2004-08-14
  • 打赏
  • 举报
回复
if (不是登陆用户)
{
DataGrid1.Columns[n1].Visible = false;
DataGrid1.Columns[n2].Visible = false;
}

...
DataGrid1.Bind();
goody9807 2004-08-14
  • 打赏
  • 举报
回复
DataGrid[Columns]_Visible.Aspx.Cs



using System;
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



}
}

goody9807 2004-08-14
  • 打赏
  • 举报
回复
下面就是实现这一功能的aspx代码和脚本代码:

DataGrid[Columns]_Visible.aspx
<%@ 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>
saucer 2004-08-14
  • 打赏
  • 举报
回复
use an ItemTemplate inside TemplateColumn, see

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuiwebcontrolstemplatecolumnclasstopic.asp
greenhill 2004-08-14
  • 打赏
  • 举报
回复
up
greenhill 2004-08-14
  • 打赏
  • 举报
回复
思归大哥<%# ((int)DataBinder.Eval(Container.DataItem,"YourColumn")) == 1? "是" : "否"%>
这段代码应该放在哪里啊?我把它放在DataField="<%# ((int)DataBinder.Eval(Container.DataItem,"F_CONS_DEAL")) == 1? "是" : "否"%>"好象没有用啊
lrzvieri 2004-08-14
  • 打赏
  • 举报
回复
http://dotnet.aspx.cc/去这里看看,你或许能够找到完整的答案
greenhill 2004-08-14
  • 打赏
  • 举报
回复
还有上面说判断用户是指定用户就可以显示出超级链接列的问题,我不是说如果是指定用户就全部显示出来,而是说某一行是数据判断是某个指定用户的数据,那他就可以看到这行的超级链接列,其他行不是他输入的数据就看不到超级链接列
greenhill 2004-08-14
  • 打赏
  • 举报
回复
555思归大哥的代码我不知道加在哪里?
greenhill 2004-08-14
  • 打赏
  • 举报
回复
那个"会员意见(*)"的列,星号我希望返回的是某个表中某个ID号的所有记录!思归大哥你的代码中的(<%# CalMyTotal(Container.DataItem)%>)中Container.DataItem是什么?我希望能返回的是某个表中某个ID号的所有记录
kennyyu 2004-08-14
  • 打赏
  • 举报
回复
把datagrid列都在代码中调用我上面给出的类似的方法(比如一般的列)来生成,这样可以很灵活的替换数据。
saucer 2004-08-14
  • 打赏
  • 举报
回复
<%# ((int)DataBinder.Eval(Container.DataItem,"YourColumn")) == 1? "是" : "否"%>
greenhill 2004-08-14
  • 打赏
  • 举报
回复
还有,我的绑定的某列数据是0或者1,我希望能转换成否或者是来显示出来
saucer 2004-08-14
  • 打赏
  • 举报
回复
how did you get that number? is it part of the records? if so, you could just do? any calculation involved?

<asp:TemplateColumn>
<ItemTemplate>
会员意见(<%# CalMyTotal(Container.DataItem)%>)
</ItemTemplate>
</asp:TemplateColumn>

int CalMyTotal(DataRowView drv)
{
int n = 0;
///
return n;
}
kennyyu 2004-08-14
  • 打赏
  • 举报
回复
你可以在代码中设置datagrid的列,而不是直接在设计器中生成这些列的属性。
然后对登陆的用户用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;
}
greenhill 2004-08-14
  • 打赏
  • 举报
回复
还有一个问题,例如我的某列是"会员意见"我可以设置成文本="会员意见"但是我希望在这里加入意见的数目,例如"会员意见(13)"这个数目是变化的请问怎样设置
greenhill 2004-08-14
  • 打赏
  • 举报
回复
thanks for your idea
zyb_17flash 2004-08-14
  • 打赏
  • 举报
回复
同意楼上的意见
saucer 2004-08-14
  • 打赏
  • 举报
回复
assume you are using templates, before you call databind, for the columns you don't want to the user to see

if (不是登陆用户)
{
DataGrid1.Columns[n1].Visible = false;
DataGrid1.Columns[n2].Visible = false;
}

...
DataGrid1.Bind();
greenhill 2004-08-14
  • 打赏
  • 举报
回复
up
加载更多回复(6)

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧