2014-01-29 5 views
1

У меня есть gridview с некоторыми данными из моей базы данных, и каждая строка контролирует что-то (в реальном мире). Один из столбцов говорит мне, включен ли мониторинг или отключен (0 или 1). Я добавил столбец (Templatefield) в gridview с помощью LinkButton. Это TemplateField объявляется следующим образом:Проблема с командой обновления в gridview

<asp:TemplateField HeaderText="Action"> 
    <ItemTemplate> 
     <asp:LinkButton ID="LinkButton1" class="btn" runat="server" CausesValidation="false" 
      CommandName="Update" Text='<%# Eval("Disable").ToString() == "1" ? "Enable" : "Disable" %>'></asp:LinkButton> 
    </ItemTemplate> 
</asp:TemplateField> 

Как вы можете видеть, свойство Text кнопки является «Enable» (если мониторинг в настоящее время отключен) или «Отключить» (если мониторинг в настоящее время включен). Это прекрасно работает.

Сетка решетки связана с объектом ObjectDataSource, а Linkbutton связана с командой Update указанного DataSource. Команда Update объекта ObjectDataSource вызывает метод из одной из моих DLL, и мне нужно передать значение (0 или 1), которое будет записано в DataBase.

Как перейти к обновляющему событию, чтобы при нажатии этой кнопки он либо активирует, либо отключает (устанавливает поле 0 или 1) в базе данных в зависимости от его текущего состояния.

Проблема связана с обновляющим событием на объекте ObjectDataSource. Я не могу представить никаких параметров

protected void ods_Updating(object sender, ObjectDataSourceMethodEventArgs e) 
{ 
    //I would like to accomplish something like 
    e.InputParameters["value"] = isItEnabled ? 0 : 1; 
} 

Любые идеи о том, как действовать?

Edit 1: Мой в.п.с. разметки

<asp:ObjectDataSource ID="odsHistoriqueSurveillance" runat="server" 
    OldValuesParameterFormatString="original_{0}" 
    onselecting="odsHistoriqueSurveillance_Selecting" SelectMethod="getHistorique" 
    TypeName="WebOrderProcessingBLL.SRVCheckValueBLLWrapper" 
    onUpdating="ods_Updating" 
    UpdateMethod="EnableOrDisableSurveillanceFromHistorique"> 
    <SelectParameters> 
     <asp:Parameter Name="ParamName" Type="String" /> 
    </SelectParameters> 
    <UpdateParameters> 
     <asp:Parameter Name="original_id" Type="Int32" /> 
     <asp:Parameter Name="value" Type="Byte" /> 
    </UpdateParameters> 
</asp:ObjectDataSource> 
+0

Не могли бы вы показать разметку 'ObjectDataSource'? – jadarnel27

+0

@ jadarnel27 обновленный пост – WizLiz

+0

Можете ли вы получить доступ к полю «Отключить» из метода обновления, если вы измените «Text =» <% # Eval («Отключить»). ToString() == "1"? «Включить»: «Отключить»%> ''только« Text = »<% # Bind (« Отключить »)%>''? – jadarnel27

ответ

1

ли находка вашего LinkButton в случае Обновление, как показано ниже:

LinkButton lb = (LinkButton) GridView1.Rows[GridView1.EditIndex].FindControl("LinkButton1"); 
if(lb!=null){ 
    //Now check what is the Text of your link button. Depending on Enable or disable you set the parameter value as needed 
    e.InputParameters["value"] = lb.Text=="Disable"? 0 : 1; 
} 
+0

Мне нравится это решение, попробуем попробовать как можно скорее. – WizLiz

0

Что мне делать в этой ситуации, это добавить событие OnClick к который вы нажимаете, а затем добавляя все значения, которые мне нужны в качестве атрибутов, примерно так:

<asp:TemplateField HeaderText="Action"> 
    <ItemTemplate> 
     <asp:LinkButton ID="LinkButton1" class="btn" runat="server" 
      CommandName="Update" Text='<%# Eval("Disable").ToString() == "1" ? "Enable" : "Disable" %>' OnClick="DoSomething" id='<%# Eval("RecordID")'></asp:LinkButton> 
    </ItemTemplate> 
</asp:TemplateField> 

А на коде:

protected void DoSomething(object sender, EventArgs e) 
{ 
    var id = (sender as LinkButton).Attributes["RecordID"]; 
    var state = (sender as LinkButton).Text; 
} 
0

Согласно вашей ObjectDataSource разметки, определить методы, как

public void EnableOrDisableSurveillanceFromHistorique(int origional_id, byte value) 
    { 
    } 

Для получения более подробной информации обратитесь к Object Data Source Strongly Type Source

также редактировать ODS разметку в

<UpdateParameters> 
     <asp:ControlParameter ControlID="control" Name="origional_id" PropertyName="SelectedValue" Type="int" /> 
    <asp:ControlParameter ControlID="control" Name="value" PropertyName="SelectedValue" Type="byte" /> 
    </UpdateParameters>   
0
protected void ods_Updating(object sender, ObjectDataSourceMethodEventArgs e) 
{ 
    if(e.CommandName=="Update") 
    GridViewRow row = (GridViewRow)ods.Rows[e.RowIndex]; 
    LinkButton lnkBtn = (LinkButton)row.FindControl("LinkButton1"); 
    //I would like to accomplish something like 
     // if (lnkBtn.Enabled == true) 
     if (lnkBtn.Text == "Enabled") 
      { 
       //Do your stuff . 
      } 
// e.InputParameters["value"] = isItEnabled ? 0 : 1; 
} 
+0

dont имеют любое из этих свойств на e – WizLiz

+0

@WizLiz, что вам нужно, это GridView1.EditIndex, как указано в моем ответе выше. – gbs

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