gpt4 book ai didi

c# - 是否可以在 UpdateCommand 运行之前以编程方式在 TextBox 控件中输入值

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:23 26 4
gpt4 key购买 nike

(C# asp.net 3.5) 我已经在 RowDataBound 事件中成功预填充了 CheckBoxList3。在编辑模式下,用户可以进行其他 checkbox 选择。我已成功捕获新值,创建一个新的逗号分隔字符串,在单击更新链接后更新 _RowUpdating 事件中的 SQL。问题是我的更新被 GridView1s 更新覆盖了。 *新字符串不是用户在 TextBox2 控件中实际输入的。

看来我有两个选择:

  1. 传递从 checkboxlist3 选择构建的以逗号分隔的字符串在运行 UpdateCommand 之前以编程方式添加到 TextBox2 控件。 P*这可能吗?* 我已经到处搜索,没有明确的解决方案。我也在 RowUpdating 中尝试过这段代码,它有所不同:

    TextBox tb2 = (TextBox)GridView1.Rows[e.RowIndex].Cells[1].FindControl("TextBox2");
    tb2.Text = strCheckBoxList3.Substring(0, strCheckBoxList3.Length - 2);

  2. 手动更新 sql,就像我在“自然”更新之后只调用 Sql 一样(因为缺少更好的词)。如果这是一个选项,在什么方法中运行更新,因为将它放在 RowUpdating 中总是会被反转。

HTML:

<asp:TemplateField HeaderText="Endorsements" SortExpression="Endorsements">
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Endorsements") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Endorsements") %>'></asp:TextBox>
<asp:CheckBoxList ID="CheckBoxList3" runat="server" Font-Size="Small" RepeatDirection="Horizontal" onselectedindexchanged="CheckBoxList3_SelectedIndexChanged"
AutoPostBack="True" >
<asp:ListItem Value="H">H</asp:ListItem>
<asp:ListItem Value="I">I</asp:ListItem>
<asp:ListItem Value="K">K</asp:ListItem>
<asp:ListItem Value="N">N</asp:ListItem>
<asp:ListItem Value="T">T</asp:ListItem>
<asp:ListItem Value="X">X</asp:ListItem>
</asp:CheckBoxList>
</EditItemTemplate>
</asp:TemplateField>

C#

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//endorsements string
string strCheckBoxList3 = String.Empty;

//find endorsements checkboxlist in gridview.
CheckBoxList cbl3 = (CheckBoxList)GridView1.Rows[e.RowIndex].Cells[1].FindControl("CheckBoxList3");

try
{
// Build Endorsements string
if (cbl3 != null)
{
// determine which checkboxes have been checked
foreach (ListItem item in cbl3.Items)
{
// is item checked?
if (item.Selected == true)
{
// build string
strCheckBoxList3 += (item.Value + ", ");

}//end of if
}// end of foreach

// Save the value in ViewState object before the PostBack
ViewState["vsEndorsementsString"] = strCheckBoxList3;
}// end of if

}// end of endorsements try

catch (ArgumentOutOfRangeException ez)
{
System.Diagnostics.Debug.WriteLine(ez.Message + "; " + ez.Source + "; " + ez.TargetSite);
}
//Note: routine to update SQL was removed here
}


// New: pass strings to sql Update Command Parameters for two checkboxlist columns in gridview
protected void sdsMySqlDataSource_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
string getViewStateEndorsementsString = ViewState["vsEndorsementsString"].ToString();
string getViewStateRestrictionsString = ViewState["vsRestrictionsString"].ToString();

foreach (System.Data.Common.DbParameter p in e.Command.Parameters)
{
if (p.ParameterName == "@Endorsements" && p.Value != null)
{
//Assign @Endorsements parameter
e.Command.Parameters["@Endorsements"].Value = getViewStateEndorsementsString.ToString();
}//if

if (p.ParameterName == "@Restrictions" && p.Value != null)
{
//Assign @Restrictions parameter
e.Command.Parameters["@Restrictions"].Value = getViewStateRestrictionsString.ToString();
}//if
}
}

最佳答案

解决方案是将新值传递给 SqlDataSource _Updating 事件中的更新命令参数。上面提供的相关更新代码。

我完全删除了 _RowUpdating 事件中的 SQL 更新例程 - 它不需要。然后我将新创建的以逗号分隔的字符串保存到我在 SqlDataSource _Updating 事件中检索的 ViewState 对象。

我得出这个结论要归功于 leoinlios,因为他在这里发帖:changing textbox value in code behind does not post back new value另外,我阅读了大量有关 View 状态的文章,发现这是最有用的文章:TRULY Understanding ViewState

关于c# - 是否可以在 UpdateCommand 运行之前以编程方式在 TextBox 控件中输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21716039/

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