gridview中的Update命令问题

时间:2014-01-29 14:40:05

标签: c# asp.net gridview updating

我有一个gridview,其中包含我的DataBase中的一些数据,每行都监视某些内容(在现实世界中)。其中一列告诉我是启用还是禁用监控(0或1)。我在gridview上添加了一个LinkBut​​ton列(Templatefield)。此TemplateField声明如下:

<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”(如果当前禁用了监视)或“Disable”(如果当前启用了监视)。这很好。

gridview链接到ObjectDataSource,Linkbutton链接到所述DataSource的命令Update。 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>

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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;
}

答案 2 :(得分: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>        

答案 3 :(得分: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;
}