如何在网格外事件中获取网格视图中的单元格控件和数据? [英] how can i get a cell control and data in gridview in out of grid events?

查看:93
本文介绍了如何在网格外事件中获取网格视图中的单元格控件和数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个gridview,其中有2列(templateColumn),第一个是复选框,第二个是复选框列表.该网格的行是从数据库创建的.每个复选框列表可以具有0到4个复选框,具体取决于数据库中的关系记录.

现在我的问题是,我有一个对象列表,每个对象都有0到4个相关记录.对于每个主要对象,必须检查其在网格中的相等性,然后在其关系记录中,应检查其在复选框列表中的相等性. 但是我无法访问网格外事件的行.
有我的代码:

i have a gridview that has 2 column (templateColumn)the frist is checkbox and the second in checkboxlist. this grid''s row is created from database. each checkboxlist can has 0 til 4 cheboxes depends on relation records in database.

now my broblem is that ,i have a listof object that each o them has 0 til 4 relational records. for each main object , it''s equal in grid must checked, and fore its relational records their equals in checkboxlist colum should checked.
but i can;t access to rows out of grid event.
there is my code :

<div  id="divMenuCapabilities" dir="rtl" align=right runat="server" style=" height:300px; overflow:scroll;">
        <asp:GridView ID="grid1" runat="server"  AutoGenerateColumns=false OnRowDataBound="grid1_OnRowDataBound"  >
              <Columns>
                 <asp:TemplateField  HeaderText="عنوان فرم">
                 <ItemTemplate>
                  <asp:CheckBox ID="CheckBox1" runat="server" text='<%#Eval("MenuItemName")%>' />
                   </ItemTemplate>
                  </asp:TemplateField>

                <asp:TemplateField HeaderText="قابلیت های فرم"  >
                  <ItemTemplate>
                    <asp:CheckBoxList runat="server" ID="cblCap"  RepeatDirection= "Horizontal"  />
                  </ItemTemplate>
                </asp:TemplateField>
                </Columns>
               </asp:GridView>
         </div>





private void FillGrid1()
       {
           ENTMenuItemEOList menuItemEoList = new ENTMenuItemEOList();
           menuItemEoList.LoadAll();
           ENTCapabilityEOList capabilityEoList = new ENTCapabilityEOList();
           capabilityEoList.Load();
           foreach (ENTMenuItemEO menuItemEo in menuItemEoList)
           {
               List<ENTCapabilityEO> entCapabilityEos = new List<ENTCapabilityEO>();
               entCapabilityEos = capabilityEoList.Where(cap => cap.ENTMenuItemId == menuItemEo.ID).ToList();
               menuItemEo.EntCapabilityEOListObject = entCapabilityEos;
           }

           grid1.DataSource = menuItemEoList;
           grid1.DataBind();

                 }


protected void Page_Load(object sender, EventArgs e)
      {
            if (!IsPostBack)
              {
                  string roleIdStr = Request.QueryString["id"];
                  int roleId = 0;
                  if (!string.IsNullOrEmpty(roleIdStr))
                  {
                      roleId = Convert.ToInt32(roleIdStr);
                  }

                  FillGrid1();
                  populateObjects(roleId);
              }
                         }


private void populateObjects(int id)
      {

ENTRoleCapabilityEOList roleCapList = new ENTRoleCapabilityEOList();
            roleCapList.LoadByRoleId(1);
            SetRoleCapToLvRoleCap(roleCapList);}



现在我想根据以下方法中的listof对象在两个列中选中一些复选框.但我不知道该怎么做.我无法在网格外事件中获得单元格控件.
请帮帮我.



now i want checked some checkboxes in both colums according to a listof object in below method. but i dont know how to do this. i can''t get cell control''s in out of grid event.
please help me.

private void SetRoleCapToLvRoleCap(ENTRoleCapabilityEOList selectedRoleCapList)
       {
           List<ENTMenuItemEO> menuItemEoList = (List<ENTMenuItemEO>) grid1.DataSource;
           foreach (ENTRoleCapabilityEO entRoleCapabilityEo  in selectedRoleCapList)
           {
               ENTCapabilityEO capabilityEo = new ENTCapabilityEO();
               capabilityEo.Load(entRoleCapabilityEo.ENTCapabilityId);


          
           }

推荐答案


为了迭代而不是使用GridView事件,您可以使用此代码
Hi,
In order to iterate instead of using GridView events you can use this code
foreach (GridViewRow grv in grid1.Rows)
{
   CheckBox CheckBox1=grv.FindControl("CheckBox1") as CheckBox;
   CheckBoxList cblCap = grv.FindControl("cblCap") as CheckBoxList;
}


现在,您可以应用验证逻辑,因为现在可以使用所有用户输入数据.

希望这会有所帮助.


Now you can apply your validation logics as all user input data is now available for you to use.

Hope this will help.


这篇关于如何在网格外事件中获取网格视图中的单元格控件和数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆