从网格视图捕获多个值以传递给存储过程

时间:2013-02-15 13:45:39

标签: c# asp.net gridview parameter-passing

asp.net和C#

这里我有gridview控件的列

当用户点击任一按钮时,我需要将CaseID,CaseworkerID,EventDate和Code的值传递给存储过程

但是如何将多个参数传递给我的onclick方法????

<columns>
<asp:BoundField DataField="CaseID" HeaderText="CaseID" Visible = "False" />
<asp:BoundField DataField="caseworkerID" HeaderText="CwID" Visible = "False" />
<asp:BoundField DataField="CaseWorker" HeaderText="Case Worker" />
<asp:BoundField DataField="EventDate" HeaderText="Event Date" />
<asp:BoundField DataField="Code" HeaderText="Code" />
  <asp:TemplateField HeaderText="ADD">
       <ItemTemplate> 
                    <asp:Button  ID="AddUnit" runat="server" Text=" +1 " onserverclick="AddUnit_Click"/>
        </ItemTemplate> 
   </asp:TemplateField> 

<asp:BoundField DataField="TotalUnits" HeaderText="Total Units" />

  <asp:TemplateField HeaderText="DDT">
       <ItemTemplate> 
          <asp:Button ID="DdtUnit" runat="server" Text=" -1 " onserverclick="DdtUnit_Click"/>
        </ItemTemplate> 
   </asp:TemplateField> 


<asp:BoundField DataField="EventType" HeaderText="Event Type" />
<asp:BoundField DataField="UnitCost" HeaderText="Unit Cost" />
<asp:BoundField DataField="TotalCost" HeaderText="Total Cost"/>

编辑: 所以我现在有了这个

            <ItemTemplate> 
                <asp:Button  ID="AddUnit" runat="server" Text=" +1 " 
                CommandName="AddUnit" 
                CommandArgument='<%# Eval("CaseID")+ ";" + Eval("caseworkerID")+ ";" + Eval("EventDate")+ ";" + Eval("Code")%>'/>
            </ItemTemplate> 

这是一个好的开始

2 个答案:

答案 0 :(得分:2)

首先对网格的所有按钮使用不同的命令名

protected void grid_RowCommand(object sender, GridViewCommandEventArgs e)
{
    string city="";
    if (e.CommandName == "btnname")
    {
        ImageButton imgbtn = (ImageButton)e.CommandSource;
        GridViewRow rows = (GridViewRow)imgbtn.NamingContainer;
        city = grid.Rows[rows.RowIndex].Cells[1].Text;           
    }

}

根据您的要求使用列的单元格id。和列ID从0开始。

任何查询都问我

答案 1 :(得分:1)

你要做的就是创建一个由特殊字符消除的命令参数。处理事件时,从事件(e)中拉出命令参数并将其拆分。 (正如utkarshs的答案所示,使用gridviews rowcommand事件,而不是onclick)

如果命令参数数据实际上包含您用于分隔符的相同字符,则可能会导致问题。但是只有一个建议(我们知道有些像productId那样有时不会包含管道(|))

编辑: 所以你的按钮应该像......

  <asp:button CommandArgument='<%# Eval("someValue") + " | " 
              + Eval("someOtherValue") + " | " %>'  
             CommandName="whatever" runat="server" text="FOO BAR" />

然后在您的网格ID为gridId

的代码后面
protected void gridId_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "btnname")
    {
        string[] differentValues = e.CommandArgument.ToString().Split("|");           
    }
}