我有一个gridview,其中包含我的DataBase中的一些数据,每行都监视某些内容(在现实世界中)。其中一列告诉我是启用还是禁用监控(0或1)。我在gridview上添加了一个LinkButton列(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>
答案 0 :(得分: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;
}
答案 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;
}