У меня есть родительский GridView, у которого был дочерний GridView (код ниже), как я могу установить значение дочернего gridview? А также, как сохранить состояние дочернего gridview, т. Е. Если оно отображается или нет? Это функция, которая вызывается при нажатии кнопки, которая считывает через сетку видение родителя, которые были выбраны публикации:GridView, доступ к дочернему элементу GridView checkbox
protected void DeleteSelectedProducts_Click(object sender, EventArgs e)
{
bool atLeastOneRowDeleted = false;
// Iterate through the Products.Rows property
foreach (GridViewRow row in GridView1.Rows)
{
// Access the CheckBox
CheckBox cb = (CheckBox)row.FindControl("PublicationSelector");
if (cb != null && cb.Checked)
{
// Delete row! (Well, not really...)
atLeastOneRowDeleted = true;
// First, get the ProductID for the selected row
int productID =
Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Value);
// "Delete" the row
DeleteResults.Text += string.Format(
"This would have deleted ProductID {0}<br />", productID);
//DeleteResults.Text = "something";
}
// Show the Label if at least one row was deleted...
DeleteResults.Visible = atLeastOneRowDeleted;
}
}
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="False" DataKeyNames="PublicationID"
DataSourceID="ObjectDataSource1" Width="467px" OnRowDataBound="GridView1_RowDataBound"
Font-Names="Verdana" Font-Size="Small">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="PublicationSelector" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="NameAbbrev" HeaderText="Publication Name" SortExpression="NameAbbrev" />
<asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
<asp:BoundField DataField="State" HeaderText="State" SortExpression="State" />
<asp:TemplateField HeaderText="Owners">
<ItemTemplate>
<asp:Label ID="Owners" runat="server"></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
<asp:BoundField DataField="Type" HeaderText="Type" SortExpression="Type" />
<asp:TemplateField HeaderStyle-CssClass="hidden-column" ItemStyle-CssClass="hidden-column" FooterStyle-CssClass="hidden-column">
<ItemTemplate>
<tr>
<td colspan="8" >
<div id="<%# Eval("PublicationID") %>" style="display: none; position: relative;" >
<asp:GridView ID="GridView2_ABPubs" runat="server" AutoGenerateColumns="false" Width="100%"
DataKeyNames="PublicationID" Font-Names="Verdana" Font-Size="small">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="ChildPublicationSelector" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="NameAbbrev" HeaderText="Publication Name" SortExpression="NameAbbrev" />
</Columns>
</asp:GridView>
</div>
</td>
</tr>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData"
TypeName="shoom_dev._Default">
</asp:ObjectDataSource>
<p>
<asp:Button ID="DeleteSelectedProducts" runat="server"
Text="Delete Selected Products" onclick="DeleteSelectedProducts_Click" />
</p>
<p>
<asp:Label ID="DeleteResults" runat="server" EnableViewState="False" Visible="False"></asp:Label>
</p>
Спасибо, что я отдам его. Тем не менее, я не понимаю эту строку »... Однако, просто потратив три дня на просмотр и настройку GridView, ваш последний столбец шаблонов с представлением дочерней сетки не нужен и узлам, так как они будут автоматически добавлены GridView, что может оказаться сложнее найти дочерний элемент управления ». Какой шаблон можно удалить? 3 дня, эта штука сводит меня с ума! Спасибо за помощь, R. – flavour404
Вам нужен шаблон. Вам просто не нужно включать узлы TR и TD в макет элемента templateField последнего шаблона –
. Я также новичок в C# и вашей вспомогательной функции в строке parent.FindControl (controlName), когда T возвращает ошибку «Тип параметра T не может использоваться с оператором «as», потому что у него нет ограничения типа класса или ограничения класса ». Извините, не пытаясь быть болью. – flavour404