一个处理数据库比较难的算法 兄弟们给看看 :)

jackymi 2006-04-15 09:52:20
第一次 选中的值 1,2,3 这三条记录 确定 添加数据库

第二次 默认读出 1,2,3 这三条记录 设置为选中状态

这次重新选值是2,3,4 也就是说2,3更新 4添加,1删除

兄弟们给一个好的算法

或者有什么好的存储过程
...全文
163 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
quou2002 2006-04-16
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4672/4672526.xml?temp=.2534906
类似问题



==== 我的邮箱:quou2002@tom.com
~~~~ 我的Blog:http://blog.csdn.net/quou2002
sunchaohuang 2006-04-16
  • 打赏
  • 举报
回复
up
可爱的排骨 2006-04-16
  • 打赏
  • 举报
回复
在设置用户权限时常用的楼主说的这个

贴点代码,可能有点乱
ASPX:
<asp:DataList ID="dl" runat="server" EnableViewState="False" Width="100%" RepeatColumns="3" ShowHeader="False" ShowFooter="False" CellPadding="0" RepeatDirection="Horizontal">
<itemstyle Height="24px" Width="33%">
</itemstyle>

<itemtemplate>
<INPUT type="checkbox" <%# (bool)DataBinder.Eval(Container.DataItem, "Checked") ? "checked" : "" %> VALUE='<%# DataBinder.Eval(Container.DataItem, "PermissionId") %>' name="cbPermission"><%# DataBinder.Eval(Container.DataItem, "PermissionTitle") %>
</itemtemplate>
</asp:DataList>

这个代码是在页面上显示checkbox的, 每个对应一种权限.
下面的代码是给上面的DATALIST绑数据的
private void dlBind()
{
User user = new User(userId);

if(user.UserId > 0)
{
lblUserName.Text = user.UserName;
lblDepartmentName.Text = user.DeparmentName;
DataTable dt = Permission.GetPermissions();
DataColumn dc = new DataColumn();
dc.DataType = typeof(bool);
dc.ColumnName = "Checked";
dc.DefaultValue = false;
dt.Columns.Add(dc);

for(int i = 0; i < user.Permssions.Length; i++)
{
for(int j = 0; j < dt.Rows.Count; j++)
{
if(user.Permssions[i] == (int)dt.Rows[j]["PermissionId"])
{
dt.Rows[j]["Checked"] = true;
break;
}
}
}

dl.DataSource = dt;
dl.DataBind();
}
}

数据库里有3个表, 一个User表, 有UserId. 一个Permission表, 有PermissionId, 还有个 UserPermission表, 有UserId和PermissionId. 每次选中N个PermissionId提示, 就把当前UserId对应的所有PermissionId删除, 再循环添加.

思路和难点我都写出来了. 剩下的楼主加油!
zhf777 2006-04-15
  • 打赏
  • 举报
回复
使用数组strIdArray[]保存第二次读取数据的ID列表
提交后循环CheckBoxList列表判断
假如CheckBox选中并且该值ID不在列表中--添加新数据
假如CheckBox选中并且该值ID在列表中---修改该数据
假如CheckBox未选中并且该值ID在列表中--删除该数据
假如CheckBox未选中并且该值ID不在列表中-跳到下一次循环
karykwan 2006-04-15
  • 打赏
  • 举报
回复
在读出时,取出'1,2,3'给str1
intP=str1.IndexOf(listr);//ListItem的Value
if(intP>=0)
{
li.Selected=true;
}
cbox.Items.Add(li);//现加入CheckBoxList

更新只要重新取得GetAresByLaw()的值就行了
flyinging 2006-04-15
  • 打赏
  • 举报
回复
学习吧
karykwan 2006-04-15
  • 打赏
  • 举报
回复
插入很简单 protected string GetAresByLaw()
{
StringBuilder sb = new StringBuilder();
Hnlawyer.BLL.BuessAreas ba = new Hnlawyer.BLL.BuessAreas();
DataView dv = ba.GetBuessArea(" bpid=0 ").Tables[0].DefaultView;
for (int a = 0; a < dv.Count; a++)
{
CheckBoxList cl1 = (CheckBoxList)chec.FindControl("cbox" + a.ToString());
for (int i = 0; i < cl1.Items.Count; i++)
{
if (cl1.Items[i].Selected)//选中的
{
sb.Append(cl1.Items[i].Value + ",");
}
}
}
return sb.ToString();
}
bluemoon0001 2006-04-15
  • 打赏
  • 举报
回复
你的意思难点不在第一次,而是在第二次是吧?

你把以前(第一次)选中添加的(1,2,3)全部删除,然后,第二次选中的2,3,4都作为添加语句来添加。

这样第二次选的时候就不会存在删除哪一个 ,修改哪两个,再添加哪一个了,这样算会算死人的。

总结:删除以前添加的所有已选记录 ,重新添加当前所选的所有记录。我在OA中用到的就是这种方法。

jackymi 2006-04-15
  • 打赏
  • 举报
回复
up

62,244

社区成员

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

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

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

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