当在单选按钮列表RbCompleted中选择“是”时,如何将查询的值放入文本框TbHoursCompleted?
我确信到目前为止我所做的一切都是不正确的,我甚至不知道如何引用TextBox来给它赋值。
谢谢你的帮助。
.aspx:
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:CommandField ShowEditButton="True" UpdateText="Save" ShowSelectButton="True" />
<asp:BoundField DataField="TrainingID" HeaderText="Training ID" InsertVisible="False" ReadOnly="True" SortExpression="TrainingID" Visible="True" />
<asp:BoundField DataField="AttendeeID" HeaderText="Attendee ID" InsertVisible="False" ReadOnly="True" SortExpression="AttendeeID" Visible="True" />
<asp:BoundField DataField="DisplayName" HeaderText="Attendee Name" SortExpression="DisplayName" ItemStyle-CssClass="colPad" Visible="True" ReadOnly="True" />
<asp:TemplateField HeaderText="Completed" SortExpression="Completed" ControlStyle-CssClass="colPad">
<EditItemTemplate>
<asp:RadioButtonList ID="RbCompleted" runat="server" Text='<%# Bind("Completed") %>' OnSelectedIndexChanged="RbCompleted_SelectedIndexChanged">
<asp:ListItem>Yes</asp:ListItem>
<asp:ListItem>No</asp:ListItem>
<asp:ListItem>Pending</asp:ListItem>
</asp:RadioButtonList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Completed") %>'></asp:Label>
</ItemTemplate>
<ControlStyle CssClass="colPad"></ControlStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="Hours Completed" SortExpression="HoursCompleted">
<EditItemTemplate>
<asp:TextBox ID="TbHoursCompleted" runat="server" Text='<%# Bind("HoursCompleted", "{0:n2}") %>' onkeypress="return num(this);" ></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="LbHoursCompleted" runat="server" Text='<%# Bind("HoursCompleted", "{0:n2}") %>'></asp:Label>
</ItemTemplate>
<ControlStyle Width="40px" />
</asp:TemplateField>
</Columns>
</asp:GridView>
C编号:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
SqlConnection DBConn = new SqlConnection(ConfigurationManager.ConnectionStrings["StaffRosterConnectionString"].ConnectionString);
string sql = "SELECT Hours FROM Training WHERE TrainingID = @TrainingID";
SqlCommand DBCmd = new SqlCommand(sql, DBConn);
try
{
DBConn.Open();
DBCmd.Parameters.Add("@TrainingID", SqlDbType.VarChar).Value = GridView1.SelectedRow.FindControl("TrainingID"); //GridView1.TrainingID Selected Row column Index 1; ? //EmployeeName.Text;
SqlDataReader dr = DBCmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
var tHours = dr["Hours"].ToString();
TextBox t = (TextBox)e.Row.FindControl("TbHoursCompleted");
t.Text = tHours.ToString();
}
dr.Close();
}
else
{
//msgFetch.Text = "No records found.";
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
DBCmd.Dispose();
DBConn.Close();
}
1条答案
按热度按时间kgsdhlau1#
好吧,这是如何工作的:
我们提供,将GV与数据绑定。
在行数据绑定时,我们“可以”拉取其他数据,但是我们想要或需要这样做吗?
让我们举个简单的例子。有些人,他们有一个酒店的身份证。
所以,这个标记:
我们的准则是:
现在我们有了这个
现在,我们当然需要table Hotels中的酒店名称。
我们也许可以为数据行绑定事件中的每一行执行一个全新的查询,但这实际上是把SQL服务器打得半死,因为对于每一行,我们都必须执行一个全新的查询。
因此,在99%的情况下,我们应该使用SQL拉入额外的列。
所需的sql很简单,而且相当容易。
我们会离开的(因为有些人还在表演,但可能没有设置酒店ID)。
因此,我们将在标记中添加HotelName,如下所示:
所以,现在SQL变成了:
现在网格显示如下:
(we当然可以/将/应该从上面移除hotel_id列)。
那么,在大多数情况下,从另一个表中提取相关的值,我们使用“join”来获取/查找/使用另一个表中的任何附加列。
如果我们要使用行数据绑定事件,那么对于25行,我们必须执行25个单独的SQL查询--除非我们用尽了所有其他简单的方法,否则我们真的不想这样做,而且在大多数情况下,这种简单的方法也会有最好的性能,甚至更好的是,最终需要我们编写更少的代码。
现在,假设我们在GV中有一个RB(单选按钮列表),并且我们只在Rb设置为“是”时显示其他值。
好的,那么我们的标记就变成了:
现在,行数据绑定事件如下所示:
注非常接近上面的。2我正在使用和操作的数据行值不是网格行,而是“数据行视图”。3这给了我用于绑定的整行数据,因此即使表中没有显示在GV中的值仍然可用。4数据行视图在绑定完成后超出范围,但在绑定过程中,我们可以充分使用数据源。
因此,我们再次强调,我们实际上不需要对每一行执行查询,并且仍然可以使用提供GV的SQL来执行“连接”Hours on/by training ID的条件。
如前所述,您可以为GV数据绑定的每一行创建/execute/have/build/code out sql和查询,但如上所述,您最好在基本查询中加入该值-即使您不打算对所有行使用/display。注意我们如何从第二个表中加入多个列,并再次注意这些列不必放置在GV中。但是可以从数据行视图源中使用。(因此,对于税收计算,或者甚至基于其他状态列的颜色格式化,我们可以使用/查看该列,即使不在GV控件中,但存在于数据源中。
因此,上面的结果现在是这样的:
我有一个名为“ShowHotel”的测试列来驱动RB按钮,但正如前面提到的,这个概念应该100%适用于您的示例。
编辑:更改单选按钮选择时更改gv
好了,再一次,加入数据列变得非常方便。
因此单选按钮列表标记变成这样-自动回发
后面的代码变成这样:
所以,现在我们得到/看到这个: