DataGrid的问题。为什幺点编辑按钮后,DataGrid里面的数据不见了,必须重新读取,才会出现数据并呈编辑状态?

catthunder 2004-12-24 09:22:02
private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex = e.Item.ItemIndex;
dataSet11 = (DataSet1)Session["DataSet"];
DataGrid1.DataSource = dataSet11.Tables[0];
DataGrid1.DataBind();
}
...全文
255 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jan1010 2004-12-24
  • 打赏
  • 举报
回复
在pageload事件里:
DataGrid1.DataSource = dataSet11.Tables[0];
DataGrid1.DataBind();
vogts 2004-12-24
  • 打赏
  • 举报
回复
需要重新绑定过的
PCXGG 2004-12-24
  • 打赏
  • 举报
回复
把if(!IsPostBack)去掉
PCXGG 2004-12-24
  • 打赏
  • 举报
回复
datagrid就是这样的(WEB页是无状态的,每次都要重新获得数据)。
catthunder 2004-12-24
  • 打赏
  • 举报
回复
if(!IsPostBack)
{

DataView dv = new DataView(dataSet11.Tables[0]);
DataGrid1.DataSource = dv;
DataGrid1.DataBind();
}
goodhy 2004-12-24
  • 打赏
  • 举报
回复
EditCommand 事件的典型处理程序将 EditItemIndex 属性设置为选定行,然后将数据重新绑定到 DataGrid 控件。
这是因为datagrid需要重新设置状态
breakerfish 2004-12-24
  • 打赏
  • 举报
回复
猜绑定的数据源有问题,给多点代码出来吧

还有,少用点Session
erbit 2004-12-24
  • 打赏
  • 举报
回复
http://www.ccw.com.cn/applic/prog/htm2003/20030828_13IYP.asp

这个问题,我是参考这个网址的代码来写的,可是不知道为什么,总是没有得到那种效果,如果解决了,我的项目也就结束了
拜托了,各位大虾,解决了,一定给分
welshem 2004-12-24
  • 打赏
  • 举报
回复
DataGrid1_EditCommand运行于Page_Load之后
不能在
Page_Load
if(!IsPostBack){}之外执行重绑定
,否则
EditCommand事件会失去引用的
betterwy 2004-12-24
  • 打赏
  • 举报
回复
<asp:DataGrid Id="grdQuestion" Runat="Server" Width="100%" BorderStyle="None" DataKeyField="QuestionId"
OnUpdateCommand="grdQue_OnUpdate" OnCancelCommand="grdQue_OnCancel" OnDeleteCommand="grdQue_OnDelete"
OnEditCommand="grdQue_OnEdit" OnItemCreated="grdQue_ItemCreated" CellPadding="2" AutoGenerateColumns="False"
BorderColor="White">
<HeaderStyle CssClass="gridHeader"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="問題點內容描述">
<HeaderStyle horizontalalign="Left" cssclass="gridHeader" verticalalign="Middle"></HeaderStyle>
<itemstyle cssclass="gridFirstItem"></itemstyle>
<itemtemplate>
 <%# DataBinder.Eval(Container,"DataItem.Content") %>
</itemtemplate>
<EditItemTemplate>
<asp:TextBox id="EditContent" Text='<%# DataBinder.Eval(Container,"DataItem.Content") %>' CssClass="standardText" TextMode="MultiLine" Columns=40 Rows=3 AutoPostBack=false Runat="Server">
</asp:TextBox>
<asp:RequiredFieldValidator Runat="Server" ErrorMessage="(請輸入問題點內容描述)" Display="Dynamic" ControlToValidate="EditContent"></asp:RequiredFieldValidator>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="短期解決對策">
<HeaderStyle horizontalalign="Left" cssclass="gridHeader" verticalalign="Middle"></HeaderStyle>
<itemstyle cssclass="gridItem"></itemstyle>
<itemtemplate>
 <%# DataBinder.Eval(Container,"DataItem.SolutionShort") %>
</itemtemplate>
<EditItemTemplate>
<asp:TextBox id="EditSolutionShort" Text='<%# DataBinder.Eval(Container,"DataItem.SolutionShort") %>' CssClass="standardText" TextMode="MultiLine" Columns=40 Rows=3 AutoPostBack=false Runat="Server">
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="長期解決對策">
<HeaderStyle horizontalalign="Left" cssclass="gridHeader" verticalalign="Middle"></HeaderStyle>
<itemstyle cssclass="gridLastItem"></itemstyle>
<itemtemplate>
 <%# DataBinder.Eval(Container,"DataItem.SolutionLong") %>
</itemtemplate>
<EditItemTemplate>
<asp:TextBox id="EditSolutionLong" Text='<%# DataBinder.Eval(Container,"DataItem.SolutionLong") %>' CssClass="standardText" TextMode="MultiLine" Columns=40 Rows=3 AutoPostBack=false Runat="Server">
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Edit" Visible="false">
<HeaderStyle horizontalalign="Left" width="50" cssclass="gridHeader" verticalalign="Middle"></HeaderStyle>
<itemstyle horizontalalign="center" cssclass="gridLastItem"></itemstyle>
<itemtemplate>
<asp:imagebutton runat="server" ImageUrl="~/Images/icon-pencil.gif" CommandName="Edit" CauseValidation="false"
ID="EditButton" AlternateText="Edit"></asp:imagebutton>
<img src="~/Images/spacer.gif" width="3">
<asp:imagebutton runat="server" ImageUrl="~/Images/icon-delete.gif" CommandName="Delete" CauseValidation="false"
ID="DeleteButton" AlternateText="Delete"></asp:imagebutton>
</itemtemplate>
<edititemtemplate>
<asp:imagebutton runat="server" ImageUrl="~/Images/icon-floppy.gif" CommandName="Update" CausesValidation="True"
ID="UpdateButton" AlternateText="Save"></asp:imagebutton>
<img src="~/Images/spacer.gif" width="3">
<asp:imagebutton runat="server" ImageUrl="~/Images/icon-pencil-x.gif" CommandName="Cancel" CauseValidation="false"
ID="CancelButton" AlternateText="Cancel"></asp:imagebutton>
</edititemtemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>

protected void grdQue_OnDelete(Object sender,DataGridCommandEventArgs e)
{
int questionId = Convert.ToInt32(grdQuestion.DataKeys[(int)e.Item.ItemIndex]);
MechQuestion.DeleteQuestion(questionId);
BindQuestionGrid();
}

protected void grdQue_OnCancel(Object sender,DataGridCommandEventArgs e)
{
grdQuestion.EditItemIndex = -1;
BindQuestionGrid();
}

protected void grdQue_OnUpdate(Object sender,DataGridCommandEventArgs e)
{
int questionId = Convert.ToInt32(grdQuestion.DataKeys[(int)e.Item.ItemIndex]);
string content = ((TextBox)e.Item.FindControl("EditContent")).Text.Trim();
string solutionshort = ((TextBox)e.Item.FindControl("EditSolutionShort")).Text.Trim();
string solutionlong = ((TextBox)e.Item.FindControl("EditSolutionLong")).Text.Trim();
MechQuestion mechToUpdate = new MechQuestion(questionId,DetailId,content,solutionshort,solutionlong);
mechToUpdate.Save();

grdQuestion.EditItemIndex = -1;
BindQuestionGrid();
}

private void grdQue_OnEdit(Object sender,DataGridCommandEventArgs e)
{
grdQuestion.EditItemIndex = e.Item.ItemIndex;
BindQuestionGrid();
}

private void grdQue_ItemCreated(object sender,System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
((ImageButton)e.Item.FindControl("DeleteButton")).Attributes.Add("onclick","return confirm('確定刪除?');");
}

我的代码,BindQuestionGrid();是绑定datagrid的,在我机器上好用
welshem 2004-12-24
  • 打赏
  • 举报
回复
原来DataGrid是以表格方式输出的,现在你改变了他的外观要显示编辑行,其数据源自动清空了,所以要重新绑定
thinhunan 2004-12-24
  • 打赏
  • 举报
回复
因为你在更新DataGrid的状态时,包括选择、编辑、删除,都是aspnet_wp.exe在服务器端重新生成一个不同的Table再呈现到客户端,所以你的这些操作对.net来说应是一次重生DataGrid所以它要重新获得数据。
  • 打赏
  • 举报
回复
本来就需要重新给其数据源绑定的啊
warren1999 2004-12-24
  • 打赏
  • 举报
回复
databind()
放到
if(!IsPostBack){}里

62,046

社区成员

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

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

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

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