gpt4 book ai didi

c# - 如何在转发器中将文本框值获取到数据库?

转载 作者:行者123 更新时间:2023-11-30 17:44:17 29 4
gpt4 key购买 nike

我有一个从数据库中填充的转发器:

using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = new SqlCommand(@"SELECT CommunityName, CID, Budget FROM Donation WHERE Year = year(getdate()) ORDER BY CommunityName", conn);
conn.Open();
SqlDataAdapter adp = new SqlDataAdapter(cmd);
DataSet myDataSet = new DataSet();
adp.Fill(myDataSet);
myRep.ItemDataBound += new RepeaterItemEventHandler(myRep_ItemDataBound);
myRep.DataSource = myDataSet;
myRep.DataBind();
}
void myRep_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
var textbox = e.Item.FindControl("community");
textbox.ClientIDMode = ClientIDMode.Static;
textbox.ID = "community" + (e.Item.ItemIndex + 1);
}

中继器:

<asp:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:Repeater ID="myRep" runat="server">
<ItemTemplate>
<div class="form-group">
<asp:Label ID='thisLbl' runat="server" Text='<%# Eval("CommunityName") %>' />
<asp:TextBox runat="server" ID="community" Text='<%# Eval("Budget") %>' CssClass="form-control" />
</div>
</ItemTemplate>
</asp:Repeater>
</ContentTemplate>
</asp:UpdatePanel>

这将创建 6 个带有标签和值的文本框,现在我的问题是如何检测这些框中的哪些属于最初从数据库中提取的记录?我希望能够修改这些框中的值并点击一个按钮将它们保存回数据库,但我似乎无法全神贯注地将它们保存到正确的记录中。

我是否应该将文本框的 ID 设置为我可以解析并与正确记录匹配的内容?在 ItemDataBound 中?

最佳答案

您必须在从预算中获取值的转发器项目模板中放置一个隐藏字段,并在回发请求中放置另一个隐藏字段以保留必须读取的 CID 值。当然,您还需要一个按钮及其点击事件处理程序。

    <asp:Repeater ID="myRep" runat="server">
<ItemTemplate>
<div class="form-group">
<asp:Label ID='thisLbl' runat="server" Text='<%# Eval("CommunityName") %>' />
<asp:TextBox runat="server" ID="txtBudget" Text='<%# Eval("Budget") %>' CssClass="form-control" />
<asp:HiddenField runat="server" ID="hdOriginalBudget" Value='<%# Eval("Budget") %>' />
<asp:HiddenField runat="server" ID="hdCID" Value='<%# Eval("CID") %>' />
</div>
</ItemTemplate>
</asp:Repeater>
<br />
<asp:Button ID="btn" runat="server" OnClick="btn_Click" />

在后面的代码中,您需要在转发器内部循环,通过将其值与隐藏字段进行比较来检查文本框是否已更改。在数据库中保存预算值后,您需要将隐藏字段值重新对齐为用户输入的新值,否则每次回发后您将始终保存该值:

    protected void btn_Click(object sender, EventArgs e)
{
foreach (RepeaterItem item in myRep.Items)
{
var txtBudget = item.FindControl("txtBudget") as TextBox;
var hdOriginalBudget = item.FindControl("hdOriginalBudget") as HiddenField;
var hdCID = item.FindControl("hdCID") as HiddenField;
if (txtBudget.Text != hdOriginalBudget.Value)
{
//If you enter here means the user changed the value of the text box

using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = new SqlCommand(@"UPDATE Donation SET Budget = @Budget WHERE CID = @CID", conn);
cmd.Parameters.Add(new SqlParameter("@Budget", int.Parse(txtBudget.Text)));
cmd.Parameters.Add(new SqlParameter("@CID", int.Parse(hdCID.Value)));
conn.Open();
cmd.ExecuteNonQuery();
}

//After you write in the database realign the values
hdOriginalBudget.Value = txtBudget.Text;
}

}
}

注意我的代码缺少最基本的验证,因此如果用户在文本框中写入无效值(例如“yyy”),它就会中断。所以请不要按原样投入生产!

关于c# - 如何在转发器中将文本框值获取到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29858023/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com