GridView控件将再次自动绑定数据。这使得它返回到开始模式(在GridView中使用Edit按钮显示只读数据)。
否则,你欺骗它下面我的示例代码...
这是我的GridView与SqlDataSource1结合数据,有DataKey名“代码”。有三个事件处理可以实现:OnRowEditing,OnSelectedIndexChanged和OnRowCancelingEdit。
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1"
DataKeyNames="code"
OnRowEditing="GridView1_RowEditing"
OnSelectedIndexChanged="GridView1_SelectedIndexChanged"
OnRowCancelingEdit="GridView1_RowCancelingEdit">
<Columns>
<asp:BoundField DataField="std_room_id" HeaderText="Room ID" SortExpression="std_room_id" />
<asp:BoundField DataField="booking_name" HeaderText="Name" SortExpression="booking_name" />
<asp:BoundField DataField="course_id" HeaderText="Course" SortExpression="course_id" />
<asp:BoundField DataField="course_period" HeaderText="Period" SortExpression="course_period" />
<asp:BoundField DataField="start_date" HeaderText="Start Date" SortExpression="start_date" />
<asp:BoundField DataField="end_date" HeaderText="End Date" SortExpression="end_date" />
<asp:CheckBoxField DataField="approved" HeaderText="Approved" SortExpression="approved" />
<asp:CommandField ShowSelectButton="true" SelectText="Edit"/>
<asp:CommandField ShowEditButton="true" Visible="false"/>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:MyConnectionString %>"
SelectCommand="SELECT * FROM [BookingRoom]"></asp:SqlDataSource>
</div>
我有两个CommandFields:SelectButton点击时,用户要打开编辑模式,并显示更新的第二CommandField中和取消按钮。
这是我的代码behide
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.Columns[7].Visible = false;
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
string code = GridView1.DataKeys[GridView1.SelectedIndex].Value.ToString();
SqlDataSource1.SelectCommand = "SELECT * FROM [BookingRoom] WHERE code = '" + code + "'";
GridView1.Columns[8].Visible = true;
GridView1.SetEditRow(0);
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.Columns[7].Visible = true;
GridView1.Columns[8].Visible = false;
}
我欺骗了它的表演SelectButton(显示文本为“编辑”)中的GridView在启动模式下,所有加载的数据。当用户通过单击SelectButton选择行时,它将开始执行GridView1_SelectedIndexChanged中的步骤,它们尝试仅显示GridView中选定的行,并将编辑模式设置为收集该行并显示第二个CommandField(更新和取消按钮) 。
要设置编辑模式的这一行GridView1.SetEditRow(0);
,它将执行GridView1_RowEditing这一步,它尝试隐藏SelectButton。
最后,您必须处理canrling编辑模式,如GridView1_RowCancelingEdit,它们尝试显示SelectButton,并隐藏Update和Cancel按钮。
我通过他们的列索引来访问这两个CommandFields根据我的GridView列:选择按钮的列索引是7和更新的列索引和取消按钮是8
必须显示问题相关的代码 – Shaharyar
添加但没有比我提到的更多。我相信这是与回发有关的事情,并且在gridview只显示一条记录之后,当gridview有多行时,它仍然具有EditIndex值。 –
基本上gridview后只显示一条记录editIdex将始终为0(因为只有行返回) –