C# GridView行更新期间动态添加的控件丢失
我有一个带有TemplateField列的GridView,我在其中放置了占位符控件。在GridView的数据绑定事件期间,我动态地向占位符添加了几个复选框。工作正常,显示正常 我的问题是在RowUpdate事件期间占位符不包含任何控件;我的复选框不见了。我还注意到它们在编辑活动中丢失了 我希望能够在行更新事件期间获取复选框的值,以便将它们保存到数据库中 下面是一些示例代码。为了缩小尺寸,我做了很多调整,但如果你想了解细节,请询问,我很乐意添加更多 HTML:C# GridView行更新期间动态添加的控件丢失,c#,asp.net,gridview,C#,Asp.net,Gridview,我有一个带有TemplateField列的GridView,我在其中放置了占位符控件。在GridView的数据绑定事件期间,我动态地向占位符添加了几个复选框。工作正常,显示正常 我的问题是在RowUpdate事件期间占位符不包含任何控件;我的复选框不见了。我还注意到它们在编辑活动中丢失了 我希望能够在行更新事件期间获取复选框的值,以便将它们保存到数据库中 下面是一些示例代码。为了缩小尺寸,我做了很多调整,但如果你想了解细节,请询问,我很乐意添加更多 HTML: 您需要在页面加载时调用BindDa
您需要在页面加载时调用BindData()方法
由于控件的工作方式,每次页面加载时都需要重新创建动态控件或列。动态控件不会保留,因此您必须在每次页面回发时重新加载它们;但是,这些控件的viewstate将保留
看
在您链接的文章中,还有一个ItemTemplate和一个EditItemTemplate,因为它们具有不同的显示,即只读和可编辑。你的也一样,所以我认为你可以简化你的设计:
<asp:GridView ID="gridView" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" ondatabound="gridView_DataBound">
<Columns>
<asp:TemplateField HeaderText="Countries">
<ItemTemplate>
<asp:PlaceHolder ID="countriesPlaceHolder" runat="server"></asp:PlaceHolder>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="editButton" runat="server" Text="Edit" onclick="editButton_Click" ></asp:LinkButton>
<asp:LinkButton ID="updateButton" runat="server" Text="Update" onclick="updateButton_Click" ></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
代码隐藏:
protected void gridView_DataBound(object sender, EventArgs e)
{
// Loop through the Holidays that are bound to the GridView
var holidays = (IEnumerable<Holiday>)gridView.DataSource;
for (int i = 0; i < holidays.Count(); i++)
{
// Get the row the Holiday is bound to
GridViewRow row = gridView.Rows[i];
// Get the PlaceHolder control
var placeHolder = (PlaceHolder) row.FindControl("countriesPlaceHolder");
var countryCheckBox = new CheckBox
{
Checked = true,
ID = "auCheckBox",
Text = "Aus",
Enabled = false
};
placeHolder.Controls.Add(countryCheckBox);
var editButton = (LinkButton)row.FindControl("editButton");
editButton.CommandArgument = i.ToString();
var updateButton = (LinkButton)row.FindControl("updateButton");
updateButton.CommandArgument = i.ToString();
updateButton.Visible = false;
}
}
protected void editButton_Click(object sender, EventArgs e)
{
LinkButton editButton = (LinkButton) sender;
int index = Convert.ToInt32(editButton.CommandArgument);
GridViewRow row = gridView.Rows[index];
// Get the PlaceHolder control
LinkButton updateButton = (LinkButton)row.FindControl("updateButton");
updateButton.Visible = true;
editButton.Visible = false;
CheckBox checkbox = (CheckBox)row.FindControl("auCheckBox");
if (checkbox != null)
{
checkbox.Enabled = true;
// Get value and update
}
}
protected void updateButton_Click(object sender, EventArgs e)
{
LinkButton updateButton = (LinkButton)sender;
int index = Convert.ToInt32(updateButton.CommandArgument);
GridViewRow row = gridView.Rows[index];
// Get the PlaceHolder control
LinkButton editButton = (LinkButton)row.FindControl("updateButton");
editButton.Visible = true;
updateButton.Visible = false;
CheckBox checkbox = (CheckBox)row.FindControl("auCheckBox");
if (checkbox != null)
{
// Get value and update
checkbox.Enabled = false;
}
}
受保护的void gridView\u数据绑定(对象发送方,事件参数e)
{
//循环浏览绑定到GridView的假日
var holidays=(IEnumerable)gridView.DataSource;
对于(int i=0;i
如果您想从启动时启用它,只需删除已启用的检查,就可以删除编辑按钮
希望对您有所帮助。您需要在页面加载时调用BindData()方法
由于控件的工作方式,每次页面加载时都需要重新创建动态控件或列。动态控件不会保留,因此您必须在每次页面回发时重新加载它们;但是,这些控件的viewstate将保留
看
在您链接的文章中,还有一个ItemTemplate和一个EditItemTemplate,因为它们具有不同的显示,即只读和可编辑。你的也一样,所以我认为你可以简化你的设计:
<asp:GridView ID="gridView" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" ondatabound="gridView_DataBound">
<Columns>
<asp:TemplateField HeaderText="Countries">
<ItemTemplate>
<asp:PlaceHolder ID="countriesPlaceHolder" runat="server"></asp:PlaceHolder>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="editButton" runat="server" Text="Edit" onclick="editButton_Click" ></asp:LinkButton>
<asp:LinkButton ID="updateButton" runat="server" Text="Update" onclick="updateButton_Click" ></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
代码隐藏:
protected void gridView_DataBound(object sender, EventArgs e)
{
// Loop through the Holidays that are bound to the GridView
var holidays = (IEnumerable<Holiday>)gridView.DataSource;
for (int i = 0; i < holidays.Count(); i++)
{
// Get the row the Holiday is bound to
GridViewRow row = gridView.Rows[i];
// Get the PlaceHolder control
var placeHolder = (PlaceHolder) row.FindControl("countriesPlaceHolder");
var countryCheckBox = new CheckBox
{
Checked = true,
ID = "auCheckBox",
Text = "Aus",
Enabled = false
};
placeHolder.Controls.Add(countryCheckBox);
var editButton = (LinkButton)row.FindControl("editButton");
editButton.CommandArgument = i.ToString();
var updateButton = (LinkButton)row.FindControl("updateButton");
updateButton.CommandArgument = i.ToString();
updateButton.Visible = false;
}
}
protected void editButton_Click(object sender, EventArgs e)
{
LinkButton editButton = (LinkButton) sender;
int index = Convert.ToInt32(editButton.CommandArgument);
GridViewRow row = gridView.Rows[index];
// Get the PlaceHolder control
LinkButton updateButton = (LinkButton)row.FindControl("updateButton");
updateButton.Visible = true;
editButton.Visible = false;
CheckBox checkbox = (CheckBox)row.FindControl("auCheckBox");
if (checkbox != null)
{
checkbox.Enabled = true;
// Get value and update
}
}
protected void updateButton_Click(object sender, EventArgs e)
{
LinkButton updateButton = (LinkButton)sender;
int index = Convert.ToInt32(updateButton.CommandArgument);
GridViewRow row = gridView.Rows[index];
// Get the PlaceHolder control
LinkButton editButton = (LinkButton)row.FindControl("updateButton");
editButton.Visible = true;
updateButton.Visible = false;
CheckBox checkbox = (CheckBox)row.FindControl("auCheckBox");
if (checkbox != null)
{
// Get value and update
checkbox.Enabled = false;
}
}
受保护的void gridView\u数据绑定(对象发送方,事件参数e)
{
//循环浏览绑定到GridView的假日
var holidays=(IEnumerable)gridView.DataSource;
对于(int i=0;i