2016-07-05 12 views
0

Es gibt keine Daten Rückkehr in meinem CommandArgument und Row Befehlscode in meinem CS-null Rückkehr in Command

Hier mein .cs Code

if(e.CommandName == "ApproveRow") 
{ 
    int index = Convert.ToInt32(e.CommandArgument); 

    //int index; 
    //bool check = int.TryParse(e.CommandName.ToString(), out index); 

    GridViewRow row = GridView1.Rows[index]; 
    string ids = row.Cells[2].Text; 

    Utility u = new Utility(); 
    string conn = u.connect(); 
    SqlConnection connUser = new SqlConnection(conn); 
    SqlCommand read = connUser.CreateCommand(); 

    string update = "UPDATE MosefTransaction SET TransStatus = 'Approved' where TransactionID = '" + ids + "'"; 

    connUser.Open(); 
    read.CommandText = update; 
    //read.Parameters.AddWithValue("@TransactionID", ids); 
    read.Parameters.Clear(); 
    read.ExecuteNonQuery(); 
} 

und hier ist mein Code aspx ist:

<asp:TemplateField HeaderText="Transaction Number" HeaderStyle-ForeColor="White"> 
    <ItemTemplate> 
     <asp:Label ID ="lblmosID" runat="server" Text='<%#Bind ("TransactionID") %>'></asp:Label> 
    </ItemTemplate> 
    <ItemStyle Width="30px" Font-Size="15px" Font-Names="Calibri" /> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Date" HeaderStyle-ForeColor="White"> 
    <ItemTemplate> 
     <asp:Label ID ="lblDate" runat="server" Text='<%#Bind ("DateFiled") %>'></asp:Label> 
    </ItemTemplate> 
    <ItemStyle Width="130px" Font-Names="Calibri" /> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Name" HeaderStyle-ForeColor="White"> 
    <ItemTemplate> 
     <asp:Label ID ="lblName" runat="server" Text='<%#Bind ("ReqName") %>'></asp:Label> 
    </ItemTemplate> 
    <ItemStyle Font-Names="Calibri" /> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Company" HeaderStyle-ForeColor="White"> 
    <ItemTemplate> 
     <asp:Label ID ="lblComp" runat="server" Text='<%#Bind ("ReqCompany") %>'></asp:Label> 
    </ItemTemplate> 
    <ItemStyle Font-Names="Calibri" /> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Branch" HeaderStyle-ForeColor="White"> 
    <ItemTemplate> 
     <asp:Label ID ="lblBranch" runat="server" Text='<%#Bind ("ReqBranch") %>'></asp:Label> 
    </ItemTemplate> 
    <ItemStyle Font-Names ="Calibri" /> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Business Unit" HeaderStyle-ForeColor="White"> 
    <ItemTemplate> 
     <asp:Label ID ="lblBU" runat="server" Text='<%#Bind ("ReqBU") %>'></asp:Label> 
    </ItemTemplate> 
    <ItemStyle Font-Names="Calibri" /> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Department" HeaderStyle-ForeColor="White"> 
    <ItemTemplate> 
     <asp:Label ID ="lblDept" runat="server" Text='<%#Bind ("ReqDept") %>'></asp:Label> 
    </ItemTemplate> 
    <ItemStyle Font-Names="Calibri" /> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Section" HeaderStyle-ForeColor="White"> 
    <ItemTemplate> 
     <asp:Label ID ="lblsection" runat="server" Text='<%#Bind ("ReqSection") %>'></asp:Label> 
    </ItemTemplate> 
    <ItemStyle Font-Names="Calibri" /> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Status" HeaderStyle-ForeColor="White"> 
    <ItemTemplate> 
     <asp:Label ID ="lblStatus" runat="server" Text='<%#Bind ("TransStatus") %>'></asp:Label> 
    </ItemTemplate> 
    <ItemStyle Font-Names="Calibri" /> 
</asp:TemplateField> 


<asp:ButtonField ButtonType="Button" CommandName="ApproveRow" HeaderText="Approve" Text="Approve" ControlStyle-CssClass="btn btn-primary" HeaderStyle-ForeColor="White" HeaderStyle-Font-Names="Calibri" ItemStyle-Font-Names="Calibri"/> 

Wo ist mein Fehler? Ich habe versucht, BoundField zu verwenden, und es funktioniert, aber ich muss das Bind für meine Batch-Kontrollkästchen verwenden. Vielen Dank!

Antwort

2

Sie können Cell.Text nicht verwenden, wenn Sie TemplateFields und echte Steuerelemente verwenden, da es "" ist.

Sie können GridViewRow.FindControl verwenden:

Label lblmosID = (Label) row.FindControl("lblmosID"); 
string ids = lblmosID.Text; 

Aber Sie sollten wirklich SQL-Parameter anstelle von String-Verkettung verwenden:

string update = @"UPDATE MosefTransaction 
        SET TransStatus = 'Approved' 
        Where TransactionID = @TransactionID"; 
using(var updateCommand = new SqlCommand(update, connUser)) 
{ 
    // presuming it's an int 
    updateCommand.Parameters.Add("@TransactionID", SqlDbType.Int).Value = int.Parse(lblmosID.Text); 
    connUser.Open(); 
    int affected = updateCommand.ExecuteNonQuery(); 
} 
+0

danke Tim! es funktionierte! –

Verwandte Themen