页面代码
后台C#
代码
- <asp:TemplateField HeaderText="Tasks">
- <EditItemTemplate>
- <asp:ListBox ID="lbTasksToRole" runat="server" DataSourceID="sdsTasks" DataTextField="name" DataValueField="id" SelectionMode="Multiple"></asp:ListBox>
- <asp:HiddenField ID="hfTasksToRole" runat="server" Value='<%# Eval("task_ids") %>' />
- </EditItemTemplate>
- <ItemTemplate>
- <asp:Label ID="lblTasksToRole" runat="server" Text='<%# Eval("tasks") %>'></asp:Label>
- </ItemTemplate>
- </asp:TemplateField>
- <asp:CommandField HeaderText="Edit" ShowEditButton="True" CancelImageUrl="~/Images/Cancel.png" EditImageUrl="~/Images/edit.gif" UpdateImageUrl="~/Images/Update.png" ButtonType="Image" />
- protected void gvRoles_RowDataBound(object sender, GridViewRowEventArgs e)
- {
- if (e.Row.RowState.ToString().Contains("Edit"))
- {
- if (e.Row.FindControl("lbTasksToRole") != null)
- {
- ListBox lbTasksToRole = (ListBox) e.Row.FindControl("lbTasksToRole");
- HiddenField hfTasksToRole = (HiddenField) e.Row.FindControl("hfTasksToRole");
- string[] task_ids = hfTasksToRole.Value.Split(',');
- foreach (ListItem item in lbTasksToRole.Items)
- {
- foreach (string id in task_ids)
- {
- if (item.Value == id)
- {
- item.Selected = true;
- }
- }
- }
- }
- }
- }
开始我用
- e.Row.RowState == DataControlRowState.Edit
发现只绑定了基数row,偶数row失去绑定,设置一个断点,会发现 前面的e.Row.RowState其实是Alernate | Edit,两个状态的组合,但是在DataControlRowState中间又没有这样的组合enum,所以用了字符串检查Contain的笨方法,虽 然通过了,总觉得有更好的方法,如果读者有什么好建议可以告诉我,十分感谢
--------------------------------------------项目背景---------------------------------------------------------------
用ObjectDataSource或者SqlDataSource取好数据
然后用GridView智能绑定,在Edit columns选项页,将Tasks列转换成模板列,这样在GridView右击编辑模板列,
在itemTemplate中放一个Lable,在Text属性中强写 Text = '<%# Eval("tasks") %>',
在editTemplate中放一个ListBox,为了让后来找到可以绑定的值,我就放了一个hiddent filed <asp:HiddenField ID&#