当您将新命令设置为SqlDataSource1.SelectCommand 时,GridView 将再次自动绑定数据。这使它返回到启动模式(在 GridView 中使用编辑按钮显示只读数据)。
否则,你把它当作我下面的示例代码来欺骗它......
这是我与 SqlDataSource1 的 GridView 绑定数据,具有 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>
我有两个 CommandField:当用户想要打开编辑模式时单击 SelectButton,第二个 CommandField 用于显示更新和取消按钮。
这是我的隐藏代码
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;
}
我通过在 GridView 中显示 SelectButton(将文本显示为“编辑”)来欺骗它,所有加载的数据都处于启动模式。当用户通过单击 SelectButton 选择行时,它将开始执行 GridView1_SelectedIndexChanged 中的步骤,尝试仅在 GridView 中显示所选行并将编辑模式设置为该行并显示第二个 CommandField (更新和取消按钮)。
要通过这一行GridView1.SetEditRow(0); 设置编辑模式,它将执行 GridView1_RowEditing 中的步骤,尝试隐藏 SelectButton。
最后,您必须像在 GridView1_RowCancelingEdit 中那样处理取消编辑模式,它会尝试显示 SelectButton,并隐藏 Update 和 Cancel 按钮。
我根据我在 GridView 中的列通过列索引访问这两个 CommandField:选择按钮的列索引为 7,更新和取消按钮的列索引为 8