(200分请教)ObjectDataSource绑定GridView 的问题~有请|思归|等高手光临!

test33 2007-10-18 11:23:11
问题如下:
我用了俩ObjectDataSource 数据源。 动态绑定到一个GridView !!!
代码下:
if (radBtnRole.Checked)
{
this.gvFill.DataSourceID = this.objRole.ID;
this.gvFill.DataKeyNames = dataKey;
this.gvFill.AutoGenerateColumns = true;
this.gvFill.DataBind();
this.gvFill.HeaderRow.Cells[0].Text = "编辑";
this.gvFill.HeaderRow.Cells[1].Text = "编号";
this.gvFill.HeaderRow.Cells[2].Text = "角色名称";
this.gvFill.HeaderRow.Cells[3].Text = "角色ID";
Page.ClientScript.RegisterStartupScript(this.GetType(), "hideUser", strJS);
}
else
{
this.gvFill.DataSourceID = this.objUser.ID;
this.gvFill.DataKeyNames = dataKey1;
this.gvFill.AutoGenerateColumns = true;
this.gvFill.DataBind();
this.gvFill.HeaderRow.Cells[0].Text = "编辑";
this.gvFill.HeaderRow.Cells[1].Text = "编号";
this.gvFill.HeaderRow.Cells[2].Text = "用户名";
this.gvFill.HeaderRow.Cells[3].Text = "密码";
this.gvFill.HeaderRow.Cells[4].Text = "角色";
this.gvFill.HeaderRow.Cells[5].Text = "呢称";
Page.ClientScript.RegisterStartupScript(this.GetType(), "hideRole", strJS1);
}

因为需要, 我要动态的使用代码 将其列的标题修改掉,或者将其列隐藏掉!!!
正常情况下应该是这样就能 改掉的 !(以上代码 也能改,但是不能访问列!)
this.gvFill.Columns[0].HeaderText = "ceshi";
但是报错了``` 我也知道错误 出在哪里!(测试得到结果this.gvFill.Columns.Count这个值居然为0,但是GridView 显示出来的列远远大于0啊);

请问哪位 达人 来解决这个问题呀``` 怎么才能动态的 隐藏列啊~~~(代码都是动态绑定,动态生成字段的)!
谢谢了!
(处女帖)只能给100 不好意思,解决了加啊~
...全文
541 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuhe7919 2007-10-24
  • 打赏
  • 举报
回复
学习!
不过我有个笨办法,就是使用MultiView,不同的ObjectDataSource、GridView在不同的View里,可编程控制显示哪个View.
this.MultiView1.SetActiveView(View1);
test33 2007-10-19
  • 打赏
  • 举报
回复
问题 基本解决```(编辑模式,点了更新不了了```)
if (this.radBtnUser.Checked)
{
if (e.Row.RowType == DataControlRowType.DataRow||e.Row.RowType==DataControlRowType.Header)
{
e.Row.Cells[3].Visible = false;
}
}

特别感谢 乱翻书!


结帖拉!

nayc 2007-10-19
  • 打赏
  • 举报
回复
貌似一般的这个this.objRole.ID这个ID应该是Int类型吧,而GridView.DataSourceID是个字符串
nayc 2007-10-19
  • 打赏
  • 举报
回复
this.gvFill.DataSourceID = this.objRole.ID; //这里要确认DataSourceID 就是ObjectDataSourceID
this.gvFill.DataKeyNames = dataKey;
this.gvFill.AutoGenerateColumns = true; //自动生成列去掉,请手动自己构造
this.gvFill.DataBind();
kyouken2007 2007-10-19
  • 打赏
  • 举报
回复

public class DB
{
public DB()
{
}
public static DataSet GetData()
{
SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["drpConnectionString"].ToString());
string strsql = "SELECT TOP (5) CNTRCD, CNTRLN, CNTRSN FROM DIVA.M_COUNTRY";
SqlDataAdapter adp = new SqlDataAdapter(strsql, con);
DataSet ds = new DataSet();
adp.Fill(ds);
return ds;
}
}

kyouken2007 2007-10-19
  • 打赏
  • 举报
回复
晕,一下代码,执行成功。。。
-------------------------------
    protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.GridView3.DataSourceID = ObjectDataSource1.ID;
//this.GridView3.DataKeyNames = dataKey;
this.GridView3.AutoGenerateColumns = true;
this.GridView3.DataBind();
}
}
protected void GridView3_RowCreated(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[0].Visible = false;
}


<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData"
TypeName="DB"></asp:ObjectDataSource>
<asp:GridView ID="GridView3" runat="server" OnRowCreated="GridView3_RowCreated">
</asp:GridView>
test33 2007-10-19
  • 打赏
  • 举报
回复
to:
帐号:kyouken2007
昵称:乱翻书

--------------------------------------------------------------------
真的不得行呀!

“/Web”应用程序中的服务器错误。
--------------------------------------------------------------------------------

指定的参数已超出有效值的范围。
参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。
参数名: index

源错误:


行 121: protected void gvFill_RowCreated(object sender, GridViewRowEventArgs e)
行 122: {
行 123: e.Row.Cells[1].Visible = false;
行 124: }
行 125:}

kyouken2007 2007-10-19
  • 打赏
  • 举报
回复
楼主,我试过了下面的代码可以隐藏列


protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[0].Visible = false;
}
libany 2007-10-19
  • 打赏
  • 举报
回复
晕死,都不知道你两个裤衩怎么来的,两个GV的话,还不是一样,DATAVIEW应该也有个DATAMANBER的属性吧,我英语不好,可能会拼错,你自己查下MSDN,有详细说明的
danjiewu 2007-10-19
  • 打赏
  • 举报
回复
lz的ObjectDataSource是IDE里面拖上去的还是自己在代码里创建的?还有lz的Page_Load方法呢?

lz可以先把this.gvFill.DataSourceID = this.objRole.ID改成this.gvFill.DataSource = this.objRole先试一下。
showmy 2007-10-18
  • 打赏
  • 举报
回复
mark
guyehanxinlei 2007-10-18
  • 打赏
  • 举报
回复
Frindly Up
xing98218 2007-10-18
  • 打赏
  • 举报
回复
mark
yuan74521940 2007-10-18
  • 打赏
  • 举报
回复
datagrid隐藏一列

// ItemCreated 事件中
protected void DataGrid1_ItemCreated(Object sender, DataGridItemEventArgs e)
{

e.Item.Cells[1].Attributs.Add("style","display:none");

}
test33 2007-10-18
  • 打赏
  • 举报
回复
汗` 师兄答非所问啊!!!
我现在要实现的功能是隐藏列啊,不是添加列的呀~


- -!
liangivw 2007-10-18
  • 打赏
  • 举报
回复
用this.gvFill.Columns.add()的方法来添加列就可以了
test33 2007-10-18
  • 打赏
  • 举报
回复
to:libany

界面上写上绑定列吗??? 是不是 在GV的控件里 手动绑上列呢?
如果 是这样的话`不行啊` 因为 我有两个OBJ 一个 GV啊` 你手动 绑定列, 到底 是绑 哪个 数据源的列呢`

所以这样 应该要出错的啊~~~

期待ing~

libany 2007-10-18
  • 打赏
  • 举报
回复
有可能是还没生成前就符值了呢,最好是界面的时候写上绑定列,或做模板列试下
test33 2007-10-18
  • 打赏
  • 举报
回复
另外说一句,ObjectDataSource做三层,也就是你有耐性。。
我想想就头疼。
------------------------------------------
吖` 少写代码啊` 速度快啊!!!ObjectDataSource 这个东西貌似 就是为了三层 而提供的吧`(不然 那三层,都手写啊?)
[DataObjectMethod(DataObjectMethodType.Insert, true)]
这个东西放在 函数上面的呀```OBJ 选择数据源 都自动选择上了!

to:
帐号:libany
恩是的啊``` 我没在界面上写绑定列的啊;
绑定了 难道 没自动生成列???

....................................
libany 2007-10-18
  • 打赏
  • 举报
回复
在事件里用E.ROWs 这种方式 我也试过 不得行的呀!!!
因为 我取 !列的总数! 是0的``` 不知道怎么会事啊
==========================
问题都说出来了,列总数是0,你用的是绑定列吧,而且没有在界面上写绑定列;你可以动态的在后代码创建列,然后进行操作
加载更多回复(10)

62,053

社区成员

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

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

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

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