2011-05-31 23 views
0

我试图从DetailsView获取datakey值并将其粘贴到表单中。我已经包括了所有的DataKeyNames但还是没能获得的价值将其粘贴在我的FormView控件,但我已经遇到了这个probles:DetailsView:索引超出范围

Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

我试过SelectedValue和SelectedRow但它只检索主键。

这里附加的是我的代码隐藏。帮助将非常感谢!

在此先感谢。

protected void FormView1_DataBound(object sender, EventArgs e) 
{ 
    if(FormView1.CurrentMode == FormViewMode.Insert) 
    { 
     TextBox bookid = FormView1.FindControl("bookidTextBox") as TextBox; 
     bookid.Text = DetailsView1.DataKey[1].ToString(); 

     TextBox employee = FormView1.FindControl("EmployeeID") as TextBox; 
     employee.Text = DetailsView1.DataKey[2].ToString(); 
    } 
} 

继承人从控制

<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 
      DataKeyNames="reservationid,bookid,EmployeeID,reservedate" DataSourceID="booklendingDataSource" Height="50px" 
      Width="300px" > 
      <Fields> 

       <asp:CommandField ButtonType="Button" ShowSelectButton="true" SelectText="Lend" /> 
       <asp:BoundField DataField="reservationid, bookid, EmployeeID" HeaderText="reservationid" 
        InsertVisible="False" ReadOnly="True" SortExpression="reservationid" 
        Visible="false" /> 

       <asp:BoundField DataField="bookid" HeaderText="bookid" 
        Visible="false" SortExpression="bookid" /> 

       <asp:BoundField DataField="booktitle" HeaderText="Title" 
        SortExpression="booktitle" /> 

       <asp:BoundField DataField="EmployeeID" HeaderText="Emp PIN" 
        SortExpression="EmployeeID" /> 

       <asp:BoundField DataField="reservedate" HeaderText="Reserve date" 
        SortExpression="reservedate" /> 

       <asp:CheckBoxField DataField="isdeleted" HeaderText="Deleted" 
        SortExpression="isdeleted" /> 

      </Fields> 
     </asp:DetailsView> 
... 

<asp:FormView ID="FormView1" runat="server" DataKeyNames="lenid" 
      DataSourceID="lendformDataSource" DefaultMode="Insert" OnDataBound="FormView1_DataBound" > 
      <EditItemTemplate> 

     ... 

      </EditItemTemplate> 
      <InsertItemTemplate> 
       bookid: 
       <asp:TextBox ID="bookidTextBox" runat="server" 
        Text='<%# Bind("bookid") %>' /> 
       <br /> 
       EmployeeID: 
       <asp:TextBox ID="EmployeeIDTextBox" runat="server" 
        Text='<%# Bind("EmployeeID") %>' /> 
       <br /> 
       department: 
       <asp:TextBox ID="departmentTextBox" runat="server" 
        Text='<%# Bind("department") %>' /> 
       <br /> 
       dateborrowed: 
       <asp:TextBox ID="dateborrowedTextBox" runat="server" 
        Text='<%# Bind("dateborrowed") %>' /> 
       <br /> 
       expdateofreturn: 
       <asp:TextBox ID="expdateofreturnTextBox" runat="server" 
        Text='<%# Bind("expdateofreturn") %>' /> 
       <br /> 

       <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" 
        CommandName="Insert" Text="Insert" /> 
       &nbsp;<asp:LinkButton ID="InsertCancelButton" runat="server" 
        CausesValidation="False" CommandName="Cancel" Text="Cancel" /> 
      </InsertItemTemplate> 
      <ItemTemplate> 
+0

到底在哪你有异常的价值观 – 2011-05-31 05:32:25

+0

哪一行是抛出的异常?我的意思是,索引从零开始,所以你可能没有索引二... – Tsvetan 2011-05-31 05:32:47

+0

我已经编辑我的文章,请看看。我只想获取datakey值'bookid','EmployeeID'和'reservedate'并将其粘贴到FormView中。 – Loupi 2011-05-31 05:48:02

回答

1

这是一个更好的方式来访问的DataItem

bookid.Text = ((DataRowView)DetailsView1.DataItem)["bookid"].ToString(); 
employee.Text = ((DataRowView)DetailsView1.DataItem)["EmployeeID"].ToString(); 
+0

谢谢!我会尝试一下。 – Loupi 2011-05-31 05:53:25

+0

出现错误:未将对象引用设置为对象的实例。 我会尽力像往常一样修复它。 – Loupi 2011-05-31 05:57:28

+2

放置一个空检查。直接调用ToString并不是一个好主意。它也可以为null。 – sajoshi 2011-05-31 06:04:50

0

代码你确定你的DetailsView1.DataKey [1]不是开始于[0]?

+0

是的,因为我只需要内部的其他数据不是主键。在我的表中,我有一个主键,一个bookid,一个employeeid,所以我想获得bookid和employeeid。 – Loupi 2011-05-31 05:36:55

+0

@Loupi;你有两个数据键?你能提供你的源头吗? – 2011-05-31 05:38:45

+0

我修改了我的帖子。请看一看。我需要检索三个datakey值'bookid','EmployeeID'和'reservedate' – Loupi 2011-05-31 05:48:46