2013-02-27 2 views
0

У меня есть проект ASP.NET, созданный с помощью C#, который использует GridViews. Строка нижнего колонтитула содержит отношение суммы, основанной на данных столбца, по заданному значению из данных, указывающих, сколько должно быть. Пользователь должен иметь возможность изменять второе значение и обновлять нижний колонтитул. Я не могу узнать, как это сделать или даже если это возможно. Я предполагал использовать другой GridView под ним, но обеспечение синхронизации столбцов между ними - это кошмар. Есть идеи?Создание данных нижнего колонтитула GridView, привязанных как данные строки

Кроме того, когда я изменяю данные столбца (используя строки редактирования/обновления), общее число не обновляется, когда я нажимаю «Обновить», но это происходит, когда я снова нажимаю «Изменить». Может ли кто-нибудь сказать мне, почему это так и как обновить общее количество в нижнем колонтитуле по обновлению?

+0

Вы должны показать нам код! – Magnus

+1

Можете ли вы опубликовать свой код на стороне клиента для GridView и ваш серверный код для событий OnEdit и OnUpdate? – Melanie

ответ

0

Если вы обнаружили, что ваши отредактированные поля обновлены «одним щелчком мыши», как правило, это связано с тем, что вы отскакиваете свой GridView, но на самом деле у вас нет или вы отскок перед тем, как сделать обновление.

С Gridview, типичным сценарием, когда вы размещаете поля в сноске, чтобы вычислить его значение во время Databinding операций страницы Lifecycle

Это идет как это, ваш файл .aspx определяет некоторый колонтитул поле, обычно некоторые BoundField который был преобразован в TemplateField с. Вот отрывок:

<asp:GridView ID="GridView1" runat="server" ShowFooter="true" ...> 
    <Columns> 
    <asp:BoundField DataField="Field1" HeaderText="Title" SortExpression="Field1" /> 
    <asp:TemplateField> 
     <ItemTemplate> 
     <asp:Label ID="Label1" runat="server" Text='<%# Bind("Field2") %>' ></asp:Label> 
     </ItemTemplate> 
     <FooterTemplate> 
     <asp:Label ID="FooterLabel1" runat="server" Text="" ></asp:Label> 
     </FooterTemplate> 
    </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

GridView События в коде позади: Это, как правило, то, что вам нужно сделать, чтобы заполнить поля колонтитула, основанные на изменении значения строки. Это VB, но вы должны иметь возможность легко конвертировать его.

// Create a variable at the Page level that will exist for 
// the duration of the Page LifeCycle 
Private FooterLabel1SubTotal as Double 

// Initialize 
Private Sub GridView1_DataBinding(sender As Object, e As EventArgs) Handles GridView1.DataBinding 
    FooterLabel1SubTotal = 0.0 
End Sub 

// Accumulate 
Private Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowDataBound 
    If e.Row.RowType = DataRow Then 
    Dim Field2 as Label = e.Row.FindControl("Field2") 
    FooterLabel1SubTotal += Convert.ToDouble(Field2.Text) 
    End If 
End Sub 

// Populate Footer with formated value 
Private Sub GridView1_DataBound(sender As Object, e As EventArgs) Handles GridView1.DataBound 
    FooterLabel1 = GridView1.FooterRow.FindControl("FooterLabel1") 
    FooterLabel1.Text = String.Format("{0:F2}", FooterLabel1SubTotal) 

End Sub 

Теперь, если вы используете любой из встроенных в Редактирование особенностей GridView, что приведет к Postback и заставит GridView пересвязать, который должен произвести перерасчет FOOTER полей каждый раз.

Смежные вопросы