思归你好,请教个问题....

oldhunter 2003-10-18 08:07:39
我设置DataGrid的AutoGenerateColumns=false;
在a方法中我对DataGrid.Columns集合加了几个列,a的执行放在Page_Load/OnInit/BindingData(这是我查询数据并邦定控件的方法)都试了,结果DataGrid的PageIndexChange方法竟然不执行,OnSorting方法也不执行.晕...

http://expert.csdn.net/Expert/topic/2369/2369875.xml?temp=.9599115
http://expert.csdn.net/Expert/topic/2369/2369766.xml?temp=.3045618

上面都是我提的,没人回答.
...全文
29 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
oldhunter 2003-10-18
  • 打赏
  • 举报
回复
在LoadViewState里初始DataGrid的列,可以显视了.但是这时候我想引用一个rbl的值,以确定显视哪些列,但这个值保存在ViewState中,它还没有被Load.引用的总是初始值.

通过判断页面中的一个控件的值或ViewState中的值,来确定是否显视DataGrid中的某列,问题是这些列都是自动生成的,不会自动被加到ViewState中,只有在LoadViewState方法中再重新添加列,添加列时那个控件的值是系统又初始化的,ViewState中的值还没有Load,真的很矛盾.

如果等LoadViewState后,再引用DataGrid的某列时,只有dg.Columns[i]了,不能根据名称直接引用,我就是想直接引用某一列,设置它的属性,因为命名时都是按字段名的,所以非常直观.

你看有什么好的解决办法吗?
saucer 2003-10-18
  • 打赏
  • 举报
回复
read the above article and re-create the columns in LoadViewState
oldhunter 2003-10-18
  • 打赏
  • 举报
回复
关键是分页的时候,private void dg_PageIndexChanged(..)就不执行
oldhunter 2003-10-18
  • 打赏
  • 举报
回复
private void btnSearch_Click(object sender, System.EventArgs e)
{
ViewState["AccountNo"] = this.txtSearchKey.Text;
ViewState["FromDate"] = this.txtFromDate.Text;
ViewState["ToDate"] = this.txtToDate.Text;
ViewState["InstRecord"] = this.rblInstRecord.SelectedValue;

this.dg.CurrentPageIndex = 0;
this.GenerateColumns();
this.BindingDg();
}

private void BindingDg()
{
string cpeCode = Convert.ToString(Session["UserCode"]);
string accountNo = ViewState["AccountNo"].ToString();
string fromDate = ViewState["FromDate"].ToString();
string toDate = ViewState["ToDate"].ToString();
string instRecord = ViewState["InstRecord"].ToString();

int count = (new DataAccess()).CountInstOrderForCpeSearch(cpeCode, accountNo, fromDate, toDate, instRecord);
this.dg.VirtualItemCount = count;

DataSet ds = (new DataAccess()).GetOrderForCpeSearch(cpeCode, accountNo, fromDate, toDate, instRecord, count, this.dg.PageSize, this.dg.CurrentPageIndex + 1);

this.dg.DataSource = ds;
this.dg.DataBind();

//Record Count
this.lblRecordCount.Text = count.ToString();
}

private void GenerateColumns()
{

// BoundColumn bcID;
// BoundColumn bcCPTime;
// BoundColumn bcOrderType;
// BoundColumn bcOrderCat;
// BoundColumn bcOrderNo;
// BoundColumn bcAccountNo;
// BoundColumn bcINReason;
// BoundColumn bcApplicant;
// BoundColumn bcTelephone;
// BoundColumn bcAppTime;
// BoundColumn bcCustSatisfation;
// HyperLinkColumn hlcDetails;
// HyperLinkColumn hlcCompleted;
// HyperLinkColumn hlcNotCompleted;

bool isNew = this.rblInstRecord.Items.FindByValue("New").Selected;
bool isCompleted = this.rblInstRecord.Items.FindByValue("Completed").Selected;
bool isEX = this.rblInstRecord.Items.FindByValue("EX").Selected;
bool isR1 = this.rblInstRecord.Items.FindByValue("R1").Selected;

//ID
bcID = new BoundColumn();
bcID.DataField = "ID";
bcID.ReadOnly = true;
bcID.HeaderText = "ID";
bcID.SortExpression = "ID";
this.dg.Columns.Add(bcID);

//Completed Time
bcCPTime = new BoundColumn();
bcCPTime.DataField = "CPTime";
bcCPTime.HeaderText = "Completed Time";
this.dg.Columns.Add(bcCPTime);

//Order Type
bcOrderType = new BoundColumn();
bcOrderType.DataField = "OrderType";
bcOrderType.HeaderText = "Order Type";
this.dg.Columns.Add(bcOrderType);

//Order Category
bcOrderCat = new BoundColumn();
bcOrderCat.DataField = "OrderCat";
bcOrderCat.HeaderText = "Order Category";
bcOrderCat.Visible = !isNew;
this.dg.Columns.Add(bcOrderCat);

//Order No
bcOrderNo = new BoundColumn();
bcOrderNo.DataField = "OrderNo";
bcOrderNo.HeaderText = "Order No";
bcOrderNo.Visible = isNew;
this.dg.Columns.Add(bcOrderNo);

//Account No 5
bcAccountNo = new BoundColumn();
bcAccountNo.DataField = "AccountNo";
bcAccountNo.HeaderText = "Account No";
bcAccountNo.Visible = !isNew;
this.dg.Columns.Add(bcAccountNo);

//INReason
bcINReason = new BoundColumn();
bcINReason.DataField = "INReason";
bcINReason.HeaderText = "Reason Code";
bcINReason.Visible = !isNew;
this.dg.Columns.Add(bcINReason);

//Applicant
bcApplicant = new BoundColumn();
bcApplicant.DataField = "Applicant";
bcApplicant.HeaderText = "Applicant";
bcApplicant.Visible = !isNew;
this.dg.Columns.Add(bcApplicant);

//Telephone
bcTelephone = new BoundColumn();
bcTelephone.DataField = "Telephone";
bcTelephone.HeaderText = "Telephone";
bcTelephone.Visible = isNew;
this.dg.Columns.Add(bcTelephone);

//Appoint Time
bcAppTime = new BoundColumn();
bcAppTime.DataField = "AppTime";
bcAppTime.HeaderText = "Appoint Time";
bcAppTime.Visible = !isNew;
this.dg.Columns.Add(bcAppTime);

//Customer Satisfation 10
bcCustSatisfation = new BoundColumn();
bcCustSatisfation.DataField = "CustSatisfationStr";
bcCustSatisfation.HeaderText = "Customer Satisfation";
bcCustSatisfation.Visible = isCompleted;
this.dg.Columns.Add(bcCustSatisfation);

//Detials
hlcDetails = new HyperLinkColumn();
hlcDetails.Text = "Details";
hlcDetails.DataNavigateUrlField = "ID";
hlcDetails.DataNavigateUrlFormatString = "CPE-Order-Details.aspx?ID={0}";
hlcDetails.Target = "_blank";
hlcDetails.Visible = isNew;
this.dg.Columns.Add(hlcDetails);

//Completed
hlcCompleted = new HyperLinkColumn();
hlcCompleted.Text = "Completed";
hlcCompleted.DataNavigateUrlField = "ID";
hlcCompleted.DataNavigateUrlFormatString = "CPE-Order-Completed.aspx?ID={0}";
hlcCompleted.Target = "_blank";
hlcCompleted.Visible = isNew;
this.dg.Columns.Add(hlcCompleted);

//Not Completed
hlcNotCompleted = new HyperLinkColumn();
hlcNotCompleted.DataNavigateUrlField = "ID";
hlcNotCompleted.Text = "Not Completed";
hlcNotCompleted.DataNavigateUrlFormatString = "CPE-Order-NotCompleted.aspx?ID={0}";
hlcNotCompleted.Target = "_blank";
hlcNotCompleted.Visible = isNew;
this.dg.Columns.Add(hlcNotCompleted);
}

private void dg_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
this.GenerateColumns();
this.dg.CurrentPageIndex = e.NewPageIndex;
this.BindingDg();
}


上面是关键代码,你看问题出哪了?
saucer 2003-10-18
  • 打赏
  • 举报
回复
since you are doing it dynamically, you need to recreate the columns/rebind the handlers, see

DataGrid Web 伺服器控制項的常見問題
http://www.microsoft.com/taiwan/msdn/library/2002/Feb-2002/whitepaper/vbtchtopquestionsaboutaspnetdatagridservercontrol.htm

62,025

社区成员

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

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

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

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