怕大家不清楚情况,写的比较多,请尽量看完。我现在学习做一个网站,其中有一个网页是负责对用户进行权限设置。在这个网页里,我用Gridview显示用户信息,第一列是用户ID,第二列是用户姓名,这2列都是绑定的数据库里用户表的字段。
第3,4,5,6列分别对应用户的4个权限,用CheckBox显示,有这个权限则CheckBox选上,否则不选。在数据库中对应权限的字段是一个字符串,字符串第一位对应第一个权限,若为1,表示此用户有这个权限,以此类推,若某用户权限字段为“1111”表明他四个权限都有,那么查询出他的信息后,他的4个CheckBox都会选上。我现在想实现的功能是,查询并显示所有的用户权限后,通过点击CheckBox更改某些用户的权限,然后点保存,保存所有修改的结果。我不知道想完成这个功能,正统的方法怎么做。我自己想了一个办法,就是管理员每点击一次CheckBox,就把他点击的那行的用户ID和权限记录下来,放到List里,形式如下:“001@1101”,001是用户ID,1101是点击后他的权限,中间用@分开,加到List里,以此类推,若一个用户点了2次,则最新的替换旧的,等修改完毕后,一点保存,就把List里所有的记录更新到数据库。我在CheckedChanged事件中往List里添加信息
目前出现的问题是:若List在CheckedChanged事件中定义,则每次点击,List都重新定义、生成,List中永远只有一条记录。若List在网页类中定义,则每次点击,List都重新定义、生成,List中永远只有一条记录。
我感觉这种情况是CheckBox的AutoPostBack属性导致的,但若CheckBox的AutoPostBack属性不是真,则不触发CheckedChanged事件。我想到几种方法,一个是List定义为static型,一个是List放到Session里,但总感觉是野路子,不正规。
请问:
1:要实现我这个功能,有没有更好的思路?
2:若就按我的思路做,该怎么做?
3,难道 Asp+C# 就没法象C那样定义一个此页面一打开就存在,一关闭就销毁的全局变量?
第3,4,5,6列分别对应用户的4个权限,用CheckBox显示,有这个权限则CheckBox选上,否则不选。在数据库中对应权限的字段是一个字符串,字符串第一位对应第一个权限,若为1,表示此用户有这个权限,以此类推,若某用户权限字段为“1111”表明他四个权限都有,那么查询出他的信息后,他的4个CheckBox都会选上。我现在想实现的功能是,查询并显示所有的用户权限后,通过点击CheckBox更改某些用户的权限,然后点保存,保存所有修改的结果。我不知道想完成这个功能,正统的方法怎么做。我自己想了一个办法,就是管理员每点击一次CheckBox,就把他点击的那行的用户ID和权限记录下来,放到List里,形式如下:“001@1101”,001是用户ID,1101是点击后他的权限,中间用@分开,加到List里,以此类推,若一个用户点了2次,则最新的替换旧的,等修改完毕后,一点保存,就把List里所有的记录更新到数据库。我在CheckedChanged事件中往List里添加信息
目前出现的问题是:若List在CheckedChanged事件中定义,则每次点击,List都重新定义、生成,List中永远只有一条记录。若List在网页类中定义,则每次点击,List都重新定义、生成,List中永远只有一条记录。
我感觉这种情况是CheckBox的AutoPostBack属性导致的,但若CheckBox的AutoPostBack属性不是真,则不触发CheckedChanged事件。我想到几种方法,一个是List定义为static型,一个是List放到Session里,但总感觉是野路子,不正规。
请问:
1:要实现我这个功能,有没有更好的思路?
2:若就按我的思路做,该怎么做?
3,难道 Asp+C# 就没法象C那样定义一个此页面一打开就存在,一关闭就销毁的全局变量?
解决方案 »
- window.showModalDialog被IE拦截
- 使用FileUpload上传文件时,发生服务器连接被重置的错误
- SQL2005存储字符串长度在2000左右,可以不用BLOB类型吧!
- asp.net mvc 3 为什么数据库中的表要加s
- 求一个判断问题
- vs.net2005 windows 项目可以调试,asp.net项目无法调试
- 请给个思路,查询时间分类!
- 一个奇怪的问题,为什么这样也能正确运行
- RadioButtonList在DataList或者GridView里什么取值
- 急求asp.net配置问题,关于Web.Config的,谢了!
- 请高手介绍几个js类库做的特效的网站
- AspNetPager控件问题
Get
Return ViewState("RightList")
End Get
Set(ByVal value As String)
ViewState("RightList") = value
End Set
End Property3、ViewState,生命周期跟随页面。范围就是在类里
2,我用的vs2008学习版,用的语言是C#,你那个好像是VB? C#里有ViewState吗??
你点保存时判断哪些checkbox选了就相应的更新数据库就是
在用户点更新的那个事件里,可以获取到用户点击的是哪一行的,根据那一行的用户id字段,只更新那一个用户的权限就可以了
帮你再顶一下吧
<tr>
<td>
ID
</td>
<td>
Name
</td>
<td>
checkbox 权限一
checkbox 权限二
checkbox 权限三
checkbox 权限四
</td>
<td>
hidden id hidOld 存储的值为 权限字段存储的值 1,1,1,1
hidden id hidNew 存储的值为 权限字段的新值, 根据同行的checkbox 的选择情况改变的
</td>
</tr>
</table> 写一段 js 功能是 在 checkbox 被改变的时候 将同行的 checkbox 的值都取出来 存储在 hidNew 中点保存的时候 遍历 Gridview 的行, 判断 hidOld 与 hidNew 值 是否一致不一致的话,更新数据库
foreach (GridViewRow gr in this.gvNews.Rows)
{
if (((CheckBox)gr.FindControl("CheckBox1")).Checked)
{}
)
也可使用隐藏域实现保存
<asp:TemplateColumn HeaderText="">
<HeaderStyle Font-Bold="True" Width="8%"></HeaderStyle>
<ItemTemplate><input type="checkbox" runat="server" id="chkSelect" onclick="AddValues(this)" value='<%#DataBinder.Eval(Container.DataItem,"BH")%>' title='<%#DataBinder.Eval(Container.DataItem,"BH")%>' NAME="chkSelect"/>
</ItemTemplate>
</asp:TemplateColumn>
function AddValues(oChk) {
if(oChk.checked)
{
var z=oChk.title;
Form1.Hf.value += "," + oChk.value;
}
else
{
var z=oChk.title;
Form1.Hf.value = Form1.Hd.value.replace("," + oChk.value,"");
}
}
if (((CheckBox)gr.FindControl("CheckBox1")).Checked)
这句什么意思?是checkbox被选上了还是被改变了?只是被选上了可不行