ASP.NET中如何实现repeater控件的单元格内数据直接编辑并保存至数据库

vita1982 2016-11-16 11:07:31
ASP.NET中如何实现repeater控件内显示的数据在单元格内(即:<td>)直接可编辑,回车保存。不要每次选中行再点击编辑按钮弹出框编辑数据,同时获得各个单元格的数据项信息,等数据都添加完成后,点击保存按钮,取得全部数据更新数据库(sqlserver )。
网上查有些jquery控件可实现相应功能,但没找到完整的可参考实例,这块不熟悉,还望高人指教,谢谢~
...全文
450 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChengCCccccc 2020-11-02
  • 打赏
  • 举报
回复

<div class="form-group">
<div class="col-md-12">
<div class="table-responsive" style="margin-bottom: 0px;">
<table border="0" cellpadding="0" cellspacing="1" class="table table-striped" style="min-width: 700px;">
<tr id="listHead" runat="server">
<th>PR Number</th>
<th>PR明细</th>
<th style="width: 70px;">数量</th>
<th style="width: 200px; text-align: right; padding-right: 30px;">单价<asp:Label ID="CurrencyView" runat="server" Text=""></asp:Label></th>
<th style="width: 160px;"> </th>
</tr>
<asp:Repeater ID="rep_Details" runat="server" OnItemDataBound="rep_Details_ItemDataBound">
<ItemTemplate>
<tr>
<td align="center" style="vertical-align: middle;">
<span style="display:none;"><asp:Label ID="lblContractDetailID" runat="server" Visible="false" Text='<%#Eval("ID")%>'></asp:Label></span>
<asp:Label ID="lblPRNumbers" runat="server" Text='<%#Eval("PRNumbers")%>'></asp:Label>
<asp:TextBox ID="r_PRNumbers" runat="server" Text='<%#Eval("PRNumbers")%>' Visible="false" ValidationGroup="rowEdit" ToolTip="PR Numbers"></asp:TextBox>
</td>
<td align="left" style="vertical-align: middle;">
<asp:Label ID="lblPRItem" runat="server" Text='<%#Eval("PRItem")%>'></asp:Label>
<asp:TextBox ID="r_PRItem" runat="server" Text='<%#Eval("PRItem")%>' Visible="false" ValidationGroup="rowEdit" ToolTip="PR明细"></asp:TextBox>
</td>
<td align="center" style="vertical-align: middle;">
<asp:Label ID="lblCount" runat="server" Text='<%#Eval("ContractCount")%>'></asp:Label>
<asp:TextBox ID="r_ContractCount" runat="server" Text='<%#Eval("ContractCount")%>' Visible="false" ValidationGroup="rowEdit" ToolTip="数量"></asp:TextBox>
</td>
<td align="right" style="text-align: right; padding-right: 30px; vertical-align: middle;">
<asp:Label ID="lblUnitPrice" runat="server" Text='<%#Eval("ContractUnitPriceView")%>'></asp:Label>
<asp:TextBox ID="r_ContractUnitPrice" runat="server" Text='<%#Eval("ContractUnitPrice")%>' Visible="false" ValidationGroup="rowEdit" ToolTip="单价"></asp:TextBox>
</td>
<td align="center" style="vertical-align: middle;">
<%-- https://www.cnblogs.com/lonelyxmas/p/3569810.html
UpdatePanel Repeater内LinkButton造成页面刷新问题
给LinkButton添加属性ClientIDMode="AutoID"
--%>
<asp:LinkButton ID="btnEditRow" runat="server" ClientIDMode="AutoID" OnClick="btnEditRow_Click" CommandArgument='<%#Eval("ID")%>'><img src="img/edit.png" alt="" /><span class="btnText">修改</span></asp:LinkButton>
<asp:LinkButton ID="btnDeleteRow" runat="server" ClientIDMode="AutoID" OnClientClick="javascript:return confirm('确认删除此条明细?');" OnClick="btnDeleteRow_Click" CommandArgument='<%#Eval("ID")%>'><img src="img/delete.png" alt="" /><span class="btnText">删除</span></asp:LinkButton>
<asp:LinkButton ID="btnConfirmUpdate" runat="server" ClientIDMode="AutoID" OnClick="btnConfirmUpdate_Click" CommandArgument='<%#Eval("ID")%>' Visible="false"><img src="img/ok.png" alt="" /><span class="btnText">确认</span></asp:LinkButton>
<asp:LinkButton ID="btnCancelUpdate" runat="server" ClientIDMode="AutoID" OnClick="btnCancelUpdate_Click" CommandArgument='<%#Eval("ID")%>' Visible="false"><img src="img/cancel.png" alt="" /><span class="btnText">取消</span></asp:LinkButton>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
<tr id="trNewRow" runat="server" visible="false" class="form-inline">
<td style="vertical-align: bottom;">
<asp:TextBox ID="PRNumbers" runat="server" ToolTip="PR Numbers" ValidationGroup="PRNewRow"></asp:TextBox>
</td>
<td>
<div class="col-lg-12" style="padding: 0px;">
<asp:TextBox ID="PRItem" runat="server" ValidationGroup="PRNewRow" ToolTip="PR明细" placeholder="请填写"></asp:TextBox>
</div>
</td>
<td style="vertical-align: bottom;">
<asp:TextBox ID="ContractCount" runat="server" ToolTip="数量" ValidationGroup="PRNewRow"></asp:TextBox>
</td>
<td style="vertical-align: bottom;">
<asp:TextBox ID="ContractUnitPrice" runat="server" ToolTip="单价" ValidationGroup="PRNewRow"></asp:TextBox>
</td>
<td style="vertical-align: bottom;">
<asp:LinkButton ID="btnAdd" runat="server" OnClick="btnAdd_Click"><img src="img/OK.png" alt="" /><span class="btnText">保存</span></asp:LinkButton>
  
<asp:LinkButton ID="btnCancel" runat="server" OnClick="btnCancel_Click"><span class="btnText"><img src="img/cancel.png" alt="" />取消</span></asp:LinkButton>
</td>
</tr>
<tr>
<td align="center" style="vertical-align: bottom;">
<asp:LinkButton ID="btnAddNewRow" runat="server" OnClick="btnAddNewRow_Click"><img src="img/add.png" alt="" /><span class="btnText">添加项目</span></asp:LinkButton>
</td>
<td colspan="4" align="right"> </td>
</tr>
</table>
</div>
</div>
</div>





protected void AddNewRowOrCancel(bool showRow)
{
trNewRow.Visible = showRow;
btnAddNewRow.Visible = !trNewRow.Visible;
ContractCount.Text = "";
ContractUnitPrice.Text = "";
PRNumbers.Text = "";
PRItem.Text = "";
}

protected void btnAddNewRow_Click(object sender, EventArgs e)
{
AddNewRowOrCancel(true);
}

protected void btnDeleteRow_Click(object sender, EventArgs e)
{
try
{
if (!(sender is LinkButton) || String.IsNullOrEmpty(((LinkButton)sender).CommandArgument))
{
return;
}
string detailid = ((LinkButton)sender).CommandArgument;
DataTable dtDetail = (DataTable)ViewState["dtDetail"];
DataRow deleteRow = dtDetail.Select("ID = " + detailid)[0];
if (dtDetail.Columns.Contains("ID"))
{
if (IntParse(deleteRow["ID"].ToString()) > 0)
{
int i = new VenderContractDetailDAL().DeleteDetail(deleteRow["ID"].ToString());
}
}
dtDetail.Rows.Remove(deleteRow);
ViewState["dtDetail"] = dtDetail;
rep_Details.DataSource = dtDetail;
rep_Details.DataBind();

CalculateAmount();
LoadApprovelList();
}
catch (Exception ex)
{
throw;
}
}

protected void rep_Details_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
try
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
if (e.Item.FindControl("btnEditRow") != null)
{
LinkButton btnEditRow = (LinkButton)e.Item.FindControl("btnEditRow");
btnEditRow.Visible
= String.IsNullOrEmpty(SubmitDate.Text.Trim())
&& CheckRole(RoleCmd.Update);
}
if (e.Item.FindControl("btn
ChengCCccccc 2020-11-02
  • 打赏
  • 举报
回复
动态生成,然后把值保存在DATATABLE中
Go 旅城通票 2016-11-17
  • 打赏
  • 举报
回复
http://www.jeasyui.com/demo/main/index.php?plugin=DataGrid&theme=default&dir=ltr&pitem= 看“Cell Editing in DataGrid”示例,不过服务器端还得你自己写代码
slwsss 2016-11-16
  • 打赏
  • 举报
回复
页面效果参考 数据更新用ajax

87,921

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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