详细信息查看:索引超出范围
我正在尝试从 DetailsView
获取 datakey 值并将其粘贴到表单中。我已经包含了所有数据键名称,但仍然无法获取将其粘贴到我的表单视图中的值,但我遇到了以下问题:
索引超出范围。必须是 非负且小于 集合。参数名称:索引
我尝试过 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" />
<asp:LinkButton ID="InsertCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="Cancel" />
</InsertItemTemplate>
<ItemTemplate>
I'm trying to get the datakey value from DetailsView
and paste it in a form. I've included all the datakeynames but still couldn't get the value to paste it in my formview but I've encountered this probles:
Index was out of range. Must be
non-negative and less than the size of
the collection. Parameter name: index
I've tried SelectedValue
and SelectedRow but it only retrieve the primary keys.
Attached here is my code-behind. Help would be much appreciated!
Thanks in advance.
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();
}
}
Heres the code from the control
<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" />
<asp:LinkButton ID="InsertCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="Cancel" />
</InsertItemTemplate>
<ItemTemplate>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是访问
DataItem
值的更好方法This is an better way to access the values of
DataItem
您确定您的DetailsView1.DataKey[1] 不是从[0] 开始吗?
Are you sure your DetailsView1.DataKey[1] not starts at [0]?