2014-01-29 93 views
1

我有一個從我的數據庫中獲取一些數據的gridview,並且每行監視一些事物(在真實世界中)。其中一列告訴我監視是啓用還是禁用(0或1)。我使用LinkBut​​ton在gridview上添加了一列(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爲「啓用」(如果監控是目前禁用)或「禁用」(如果當前已啓用監控)。這工作正常。

GridView鏈接到一個ObjectDataSource,鏈接按鈕鏈接到所述數據源的命令更新。 ObjectDataSource的Update命令從我的一個DLL中調用一個方法,我需要傳遞將寫入DataBase的值(0或1)。

我應該如何進行更新事件,以便當我單擊此按鈕時,根據其當前狀態在數據庫中啓用或禁用(將字段設置爲0或1)。

我的問題來自ObjectDataSource的更新事件。我似乎無法通過任何參數

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

有關如何進行的任何想法?

編輯1:我的ODS標記

<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(「Disable」),那麼您是否可以通過Updating方法訪問「Disable」字段?ToString()==「1」? 「啓用」:「禁用」%>''只是'文本='<%#綁定(「禁用」)%>''? – jadarnel27

回答

1

做你的LinkBut​​ton的發現在更新事件象下面這樣:

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

沒有任何這些屬性在e – WizLiz

+0

@WizLiz你需要的是GridView1.EditIndex,正如我在上面的回答中所提到的。 – gbs