我在一个gridview里的 <EmptyDataTemplate></EmptyDataTemplate>里放了一个detailview 用来添加新数据
我想在后台*.aspx.cs文件中设置detailview的数据源 (没有用数据源控件)
可是获取不到detailview的ID
只能获取到gridview的的id 
后来通过设置DataSource="<%#  %>"  解决了 
后来又碰到了问题 是这样的:
我想在下面的方法中获取detailview编辑框的值 以便插入数据库 不知道如何获取 
  protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e)
        {
      }
请大家指教 谢谢

解决方案 »

  1.   

      string param1 = ((TextBox)DetailsView1.Rows[e.RowIndex].FindControl("TextBox1")).Text;
    string param2 = ((TextBox)DetailsView1.Rows[e.RowIndex].FindControl("TextBox2")).Text;
      

  2.   

    楼上的 
    关键是获取不到DetailsView1 因为把它嵌套在gridview中
      

  3.   

    DetailsView dvTmp = GridView1.Rows[i].Cells[j].FindControl("DetailsView1") as DetailsView;其中,i为DetailView所在的行,j为所在的列
      

  4.   

    一般采用detailview ,都是直接绑定实体类或者SqlDataSource来做的。
    理论上不需要在插入的时候写代码的。 实体类的话,是需要有个插入的方法,如果是SqlDataSource的话,需要一个插入的存储过程。如果你非要控制插入的时候获取数据的话,可以采用:System.Collections.Specialized.IOrderedDictionary keyVaules = e.Values;keyVaules  里面有Key的Collection和Value的Collection可以分别获取到
      

  5.   

       param1= ((DetailsView1)WaterGridView1.Rows[e.RowIndex].FindControl("DetailsView1")).text ;        
    param2= ((DetailsView1)WaterGridView1.Rows[e.RowIndex].FindControl("DetailsView1")).Items[1].text;
    你试试这个方法
    只是个例子 你可以在后面通过 子项 或索引 找到 相应的行
      

  6.   

    4楼的朋友
    我觉的不那样的话 分层好像没啥意义了
    我尝试了使用datakeynames  但用e.Values获取不到 你QQ多少啊
      

  7.   

    shulei521  WaterGridView1哪里来?
      

  8.   

    Jack_xiao 我已经在二楼说了
      

  9.   

    DetailsView1在GridView1外面无法直接访问,但在GridView1里用FindControl是可以访问的,关键是你要定位好他所在的单元格
      

  10.   

    晕 那你帮我看下是几行几列<asp:GridView ID="GridView1" runat="server" Width="576px" CellPadding="4" ForeColor="#333333" 
               GridLines="None" style="font-size: 12px; text-align: center;" AllowSorting="True" AutoGenerateColumns="False" 
               DataKeyNames="newsType_id"  PageSize="5" OnRowDataBound="GridView1_RowDataBound"
               OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing"
               OnRowUpdating="GridView1_RowUpdating" OnRowCancelingEdit="GridView1_RowCancelingEdit" Height="91px" OnRowCommand="GridView1_RowCommand"
               >
                   <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                   <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                   <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                   <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                   <EditRowStyle BackColor="#999999" />
                   <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                   
                   <Columns>
                       <asp:BoundField DataField="newsType_id" HeaderText="编号" InsertVisible="False" ReadOnly="True"
                           />
                       <asp:BoundField DataField="newsType_name" HeaderText="新闻类别" />
                       <asp:BoundField DataField="newsType_total" HeaderText="新闻总数" />
                       <asp:CommandField HeaderText="操作" ShowDeleteButton="True" ShowEditButton="True" InsertVisible="False" >
                           <HeaderStyle HorizontalAlign="Right" />
                           <ItemStyle HorizontalAlign="Right" />
                       </asp:CommandField>
                       <asp:ButtonField CommandName="Insert" Text="插入" >
                           <HeaderStyle HorizontalAlign="Right" />
                           <ItemStyle HorizontalAlign="Left" />
                       </asp:ButtonField>
                   </Columns>
                   
                   <EmptyDataTemplate>
                   
                       <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DefaultMode="Insert"
                           Height="50px" Width="241px" DataSource="<%# getDataSet() %>" 
                           OnItemInserted="DetailsView1_ItemInserted" OnItemInserting="DetailsView1_ItemInserting"
                           datakeynames="newsType_name"
                           >
                           <Fields>
                          
                               <asp:BoundField DataField="newsType_name" HeaderText="新闻类别名称"  />
                               <asp:BoundField DataField="newsType_total" HeaderText="新闻总数"  />
                               <asp:CommandField ShowInsertButton="True" HeaderText="操作" ShowHeader="True" />
                           </Fields>
                       </asp:DetailsView>
                 
                       
                   </EmptyDataTemplate>
                   
               </asp:GridView>
      

  11.   

    gridview里的 <EmptyDataTemplate> </EmptyDataTemplate>里放了一个detailview 用来添加新数据楼主我觉得这样做法很不合理,难道你有数据了就不需要再添加数据了吗?还是把detailview放到外面,跟gridview绑定同一数据源吧。
      

  12.   

    我在点插入后把GridView1的数据源置空了
    在protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e) {}里
    测试GridView1.Rows.Count <1
      

  13.   

      string param1 = ((TextBox)DetailsView1.Rows[e.RowIndex].FindControl("TextBox1")).Text; 
    string param2 = ((TextBox)DetailsView1.Rows[e.RowIndex].FindControl("TextBox2")).Text; 
      

  14.   

    king5281273 我是参考了这篇文章
    http://hi.baidu.com/dangzhang/blog/item/de9db2455e8f3323cffca3e1.html
      

  15.   

    GridView控件提供了一个被称作Empty Data Template的模板。 当GridView里没有数据显示的时候这个模板就会显示出来。
    ===============================================================================
    这是不是说<Columns>和<EmptyDataTemplate>是并列的,只能存在一个?
    如果是的话,DetailsView1是不是只会出现在第0行?
    DetailsView dvTmp = GridView1.Rows[0].FindControl("DetailsView1") as DetailsView;其实,插入一条记录的方法很多,就像12楼所说,数据库不空时就不需要插入数据了吗?
    我个人认为,还是把DetailsView放外面好,你说的那篇文章只是提供一种对待查不出数据的方法,具体怎么实现还是要看具体情况
      

  16.   

    protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e) 

          DetailsView DetailsView1 = sender as DetailsView;
          //使用DetailsView1 做你下面的操作
      

  17.   

    呵呵 ,谢谢大家的回复 
    应该是这样的:
    ===============================================================================
    GridView控件提供了一个被称作Empty Data Template的模板。 当GridView里没有数据显示的时候这个模板就会显示出来。 一般在没有数据显示的时候,这个模板会被用于显示一个给出示给用户的状态信息。 但是,你也可以为了别的目的而是用它。 本例中,你将使用它来给GridView增加新的记录。===============================================================================我还想这样做 看行不行 不知道有没有解决办法
      

  18.   

    GridView本身对添加支持的并不好我见过的添加的方法一般是在GridView的FootTemplate中进行添加的操作
      

  19.   

    运用amandag 的方法 问题解决了