[100分求助]关于DataList的相关内容修改后,无法拿到的问题?

hillfree 2003-09-19 09:02:28
请仔细往下看,不仅仅是IsPostBack中绑定的问题。

问题简述:

在页面中有一DataList,对其<ItemTemplate>和<EditItemTemplate>都做了规定,大致如附录A:

其中在EditItemTemplate中主要是通过一个TextBox,拿到更改后的新数值。

可是,每次在DataList1_UpdateCommand命令中通过
param[1] =((TextBox)e.Item.FindControl("Textbox0")).Text; 拿到的都是绑定的值,而不是更改后的值。

试过的方法:

经过在论坛的搜索和QuickStart中的示例,发现在Page_Load中需要将相关的绑定代码放在if(!Page.IsPostBack){DataBindJob();}。见附录B:我的Page_Load函数。

但是,这样做了之后,点击“编辑按钮”,整个DataList就消失了,也就是没有Bind上任何内容?不知为何?

因为我的DataBind是需要从Request.QueryString中得到参数的,见附录B。所以我仿照QuickStart的示例把所有的绑定操作放在一个Popuplist函数中了。

望大侠们不吝赐教。解决后立即给分,不够再加100分。


附录A:DataList的相关模板

<ItemTemplate>
<b>姓名: </b>
<%# DataBinder.Eval(Container.DataItem, "姓名") %> <br>
//...
<asp:linkbutton CommandName="Edit" runat="server" ID="editButton">
<img border="1" src="edit.gif">
</asp:linkbutton>
</ItemTemplate>
<EditItemTemplate>
<b>姓名: </b>
<asp:TextBox id="Textbox0" AutoPostBack=True Text='<%# DataBinder.Eval(Container.DataItem, "姓名") %>' runat="server"/>
<br>
<asp:linkbutton CommandName="Update" runat="server" ID="updateButton">
<img border="0" src="save.gif">
</asp:linkbutton>
</EditItemTemplate>

附录B:我的Page_Load函数

private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
this.PopulateList();
}

}

附录C: 绑定动作函数

private void PopulateList()
{
String id = Request.QueryString["clientid"];
//...
String queryString = "SELECT * FROM 客户列表 WHERE 客户列表.编号=" + id ;

OleDbDataAdapter myCommand = new OleDbDataAdapter(queryString, myConnection);

DataSet ds = new DataSet();
myCommand.Fill(ds, "客户列表");
DataList1.DataSource = ds.Tables["客户列表"].DefaultView;
DataList1.DataBind();

myConnection.Close();
}
...全文
37 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hillfree 2003-09-19
  • 打赏
  • 举报
回复
谢谢大家,问题搞定了。

因为Page_Load()中目前是这样的
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
this.PopulateList();
}
}
因为这样DataList在充刷后消失,我最后保持Page_load不变,把PopulateList()函数干脆放到各个Command中去了。
比如原来的EditCommand是这样的
{
DataList1.EditItemIndex = e.Item.ItemIndex;
DataList1.DataBind();
}

现在改为
{
this.PopulateList();
DataList1.EditItemIndex = e.Item.ItemIndex;
DataList1.DataBind();
}

就行了。其他Command也是这样,在需要DataBind的时候调用this.PopulateList().

谢谢大家了。//bow

人人有分!:D
supercdz 2003-09-19
  • 打赏
  • 举报
回复
夸张,那你们客户肯定是很好搞定的啦

我们每次都取前300条,其他的都用搜索,他想搜索多少就多少,想怎么搜索就怎么搜索
acewang 2003-09-19
  • 打赏
  • 举报
回复
我做过一个电力的,一次刷新出来1G,呵呵
supercdz 2003-09-19
  • 打赏
  • 举报
回复
不好意思,上面代码贴错了


数据量大的时候,你可以控制一下,取出数据库中的前多少条

你总不至于,把历史记录一次性都要取出来吧
supercdz 2003-09-19
  • 打赏
  • 举报
回复
我们从不用直接在DataGrid中直接编辑这种方式

private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
}
else if (e.CommandName =="Delete")
{
Conn cn = new Conn();
cn.open();
string strSql = "update T_News set News_ISDelete=1 where News_ID=" + e.Item.Cells[0].Text;
cn.Sqlcommand(strSql).ExecuteNonQuery();
ds.Tables[0].Rows.Remove(ds.Tables[0].Rows[e.Item.ItemIndex]);
refreshForm();
cn.close();
Specialist.JavaScript.Alert(Page, "删除成功!");
}
acewang 2003-09-19
  • 打赏
  • 举报
回复
ds数据少静态变量没问题,要是大了...那就难说了.
acewang 2003-09-19
  • 打赏
  • 举报
回复
我看清楚了,

把你编辑按钮里的代码贴一下,
supercdz 2003-09-19
  • 打赏
  • 举报
回复
只要将ds设为全局的静态变量,你的其他代码无需改动

方法2:DataSet ds = new DataSet(); 中的ds设为全局的静态变量
如 private DataSet ds = null; 或用Page的ViewState来保存



后面代码无需在绑定,我们公司的代码都是这么实现的
hillfree 2003-09-19
  • 打赏
  • 举报
回复
关键是
(1) 把bind()放到if(!Page.IsPostBack)里面,那么点击“编辑”后,DataList就没了。
(2) 如果直接再Page_Load里面,bind()那么就更新不了。

请先看清出提问。
hillfree 2003-09-19
  • 打赏
  • 举报
回复
to: acewang(**^o^**)

我就是这么做得。可是一点“编辑”,DataList就没了
acewang 2003-09-19
  • 打赏
  • 举报
回复
if(!Page.IsPostBack)
{
//bind()
}

编辑事件里:
DataList1.SelectedIndex=e.CurrentItemIndex;
bind();
hillfree 2003-09-19
  • 打赏
  • 举报
回复
把绑定操作放到if(!Page.IsPostBack)之外,岂不是第一次load页面都无法绑定,此后的每次操作都会自动再绑定一次。

第二种方法好像没说完,愿闻其详。

谢谢
supercdz 2003-09-19
  • 打赏
  • 举报
回复
原因是每次执行Update之前都先执行了Page_Load


方法1: 把this.PopulateList();提到if(!Page.IsPostBack)之外,

方法2:DataSet ds = new DataSet(); 中的ds设为全局的静态变量
如 private DataSet ds = null; 或用Page的ViewState来保存
acewang 2003-09-19
  • 打赏
  • 举报
回复
点击编辑以后再时间里面还需要重新绑定,
hillfree 2003-09-19
  • 打赏
  • 举报
回复
hehe,谢谢翔子,我的做法完全按照QuickStart,怎么就不行呢。我这心啊,拔凉拔凉的。
rqxiang 2003-09-19
  • 打赏
  • 举报
回复
up

62,046

社区成员

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

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

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

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