我有一个gridview,其中包含来自我的数据库的一些数据,并且每行监视某些东西(在现实世界中)。其中一列告诉我是否启用了监视或禁用(0或1)。我已经在linkButton的GridView上添加了列(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>
您可以看到按钮的属性文本为"启用"(如果当前已禁用了监视)或"禁用"(如果当前启用了监视)。效果很好。
gridView链接到对象dataSource,链接链接链接到所述dataSource的命令更新。ObjectDataSource的更新命令从我的一个DLL中调用方法,我需要传递将写入数据库中的值(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>
在更新事件中查找您的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;
}
我在这种情况下所做的工作是在您要单击的输入元素中添加一个单击事件,然后添加我需要的所有值作为属性,类似的内容:
<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>
和在CodeBehind上:
protected void DoSomething(object sender, EventArgs e)
{
var id = (sender as LinkButton).Attributes["RecordID"];
var state = (sender as LinkButton).Text;
}
根据您的objectDatasource标记,将方法定义为
public void EnableOrDisableSurveillanceFromHistorique(int origional_id, byte value)
{
}
有关更多详细信息,请参阅对象数据源强烈键入源
也将ODS标记编辑为
<UpdateParameters>
<asp:ControlParameter ControlID="control" Name="origional_id" PropertyName="SelectedValue" Type="int" />
<asp:ControlParameter ControlID="control" Name="value" PropertyName="SelectedValue" Type="byte" />
</UpdateParameters>
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;
}