2013-09-23 3 views
0

Привет, у меня есть страница поиска, где у меня есть текстовая кнопка, кнопка и сетка. Теперь, когда я ввожу имя пользователя и нажимаю кнопку поиска, я получаю детали пользователя.Как сделать бит ложным, когда пользователь выбирает флажок в gridview

Моя база данных, как это

enter image description here

Я уже связать свою GridView при загрузке страницы, так что я могу также просмотреть подробную информацию о пользователе в GridView, как это:

enter image description here

Теперь в этом gridview вы можете увидеть заголовок IsEnable, который имеет элемент управления флажком. Это Enable - это бит, который всегда прав, когда пользователь создан.

Что я хочу, когда пользователь нажимает на этот флажок, который бит становится ложным, я пытаюсь это сделать в rowdataound, но он дает мне объектную ссылку. Можете ли вы, ребята, сказать мне, что я делаю, чтобы сделать мой бит ложным, когда пользователь выбирает этот флажок.

Пожалуйста, помогите мне в этом заранее спасибо

Теперь это то, что я теперь делать с моим кодом теперь скажите мне, как обновить мой бит разрешения от верной ложна на обновление строки

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     this.GetGridData(); 
    } 
} 
protected void BindGrid() 
{ 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("Select * from CreateUser", con); 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    da.Fill(ds); 
    con.Close(); 
    if (ds.Tables[0].Rows.Count > 0) 
    { 
     GridView1.DataSource = ds; 
     GridView1.DataBind(); 
    } 
    else 
    { 
     ds.Tables[0].Rows.Add(ds.Tables[0].NewRow()); 
     GridView1.DataSource = ds; 
     GridView1.DataBind(); 
     int columncount = GridView1.Rows[0].Cells.Count; 
     GridView1.Rows[0].Cells.Clear(); 
     GridView1.Rows[0].Cells.Add(new TableCell()); 
     GridView1.Rows[0].Cells[0].ColumnSpan = columncount; 
     GridView1.Rows[0].Cells[0].Text = "No Records Found"; 
    } 
} 
private void GetGridData() 
{ 
    con.Open(); 
    string query = "Select * from CreateUser"; 
    da = new SqlDataAdapter(query, con); 
    DataSet ds = new DataSet(); 
    da.Fill(ds); 
    GridView1.DataSource = ds; 
    GridView1.DataBind(); 
    con.Close(); 
} 
protected void btnSearchUser_Click(object sender, EventArgs e) 
{ 
    this.BindGrid(); 
} 
protected void lnkdelete_Click(object sender, EventArgs e) 
{ 
    LinkButton lnkbtn = sender as LinkButton; 
    //getting particular row linkbutton 
    GridViewRow gvrow = lnkbtn.NamingContainer as GridViewRow; 
    //getting userid of particular row 
    int UserID = Convert.ToInt32(GridView1.DataKeys[gvrow.RowIndex].Value.ToString()); 
    string FirstName = gvrow.Cells[0].Text; 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("delete from CreateUser where UserID=" + UserID, con); 
    int result = cmd.ExecuteNonQuery(); 
    con.Close(); 
    if (result == 1) 
    { 
     BindGrid(); 
     //Displaying alert message after successfully deletion of user 
     ScriptManager.RegisterStartupScript(this, this.GetType(), "alertmessage", "javascript:alert('" + FirstName + " details deleted successfully')", true); 
     this.GetGridData(); 
    } 
} 
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    //if (e.Row.RowType == DataControlRowType.DataRow) 
    //{ 
    // //getting username from particular row 
    // string FirstName = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "FirstName")); 
    // //identifying the control in gridview 
    // LinkButton lnkbtnresult = (LinkButton)e.Row.FindControl("lnkdelete"); 
    // //raising javascript confirmationbox whenver user clicks on link button 
    // lnkbtnresult.Attributes.Add("onclick", "javascript:return ConfirmationBox('" + FirstName + "')"); 
    //} 
} 
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    GridView1.PageIndex = e.NewPageIndex; 
    GetGridData(); 
} 
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 
    GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex]; 
    Label userid= (Label)row.FindControl("lblUserID"); 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("delete FROM CreateUser where UserID='" + Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value.ToString()) + "'", con); 
    cmd.ExecuteNonQuery(); 
    con.Close(); 
    BindGrid(); 
} 
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    GridView1.EditIndex = e.NewEditIndex; 
    BindGrid(); 
} 
protected void GridView1_RowUpdating1(object sender, GridViewUpdateEventArgs e) 
{ 
    string query = string.Empty; 
    string userid = GridView1.DataKeys[e.RowIndex].Values["UserID"].ToString(); 
    //Label id = GridView1.Rows[e.RowIndex].FindControl("lblUserID") as Label; 
    TextBox FirstName = GridView1.Rows[e.RowIndex].FindControl("txtFirstName") as TextBox; 
    TextBox LastName = GridView1.Rows[e.RowIndex].FindControl("txtLastName") as TextBox; 
    TextBox DomainID = GridView1.Rows[e.RowIndex].FindControl("txtDomainID") as TextBox; 
    TextBox EmailID = GridView1.Rows[e.RowIndex].FindControl("txtEmailID") as TextBox; 
    TextBox Password = GridView1.Rows[e.RowIndex].FindControl("txtPassword") as TextBox; 
    TextBox ConfirmPassword = GridView1.Rows[e.RowIndex].FindControl("txtConfirmPassword") as TextBox; 
    TextBox RoleType = GridView1.Rows[e.RowIndex].FindControl("txtRoleType") as TextBox; 
    CheckBox IsEnable = GridView1.Rows[e.RowIndex].FindControl("chkIsEnableEdit") as CheckBox; 
    //TextBox textadd = (TextBox)row.FindControl("txtadd"); 
    //TextBox textc = (TextBox)row.FindControl("txtc"); 
    GridView1.EditIndex = -1; 
    con.Open(); 
    //SqlCommand cmd = new SqlCommand("SELECT * FROM detail", conn); 
    SqlCommand cmd = new SqlCommand("update CreateUser set FirstName='" + FirstName.Text + "',LastName='" + LastName.Text + "',DomainID='" + DomainID.Text + "',EmailID='" + EmailID.Text + "',Password='" + Password.Text + "',ConfirmPassword='" + ConfirmPassword.Text + "',RoleType='" + RoleType.Text + "',Enable='" + IsEnable.Checked + "' where UserID='" + userid + "'", con); 
    cmd.ExecuteNonQuery(); 
    con.Close(); 
    BindGrid(); 
    //GridView1.DataBind(); 
} 
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 
{ 
    GridView1.EditIndex = -1; 
    BindGrid(); 
} 

}

+3

Что линия ссылка ошибка объект на? BTW, 'if (chk.Checked && chk == null)' на самом деле не имеет никакого смысла. –

+0

sry i did not update that its only if (chk.checked) not if (chk.checked && chk == null) – amitesh

+0

Почему вы переходите через сырые файлы сетки, но затем проверяете e.Row? – user844541

ответ

1

Положите несколько оборонительный кодирование в первом, и выяснить, где происходит ссылка на объект ошибки:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     var chk = (CheckBox)e.Row.FindControl("chkEnable"); 
     if (chk == null || !chk.checked) return; 
     var userId =GridView1.DataKeys[row.RowIndex].Value as string; 
     if (string.IsNullOrWhiteSpace(userId)) return; 
     var query = "update CreateUser set Enable='False' where UserID='" + userid + "'"; 
     cmd = new SqlCommand(query, con); 
     cmd.CommandType = CommandType.Text; 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
     } 
} 

Вы можете использовать событие CheckChanged:

<asp:GridView ID="GridView1" runat="server" onrowcommand="GridView1_RowCommand"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:CheckBox ID="chkEnable" runat="server" AutoPostBack="true" OnCheckedChanged="ChkEnable_CheckedChanged" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

А затем обновить базу данных в CheckChanged события :

protected void ChkEnable_CheckedChanged(object sender, EventArgs e) 
{ 
    int selRowIndex = ((GridViewRow)(((CheckBox)sender).Parent.Parent)).RowIndex; 
    var userId = gridView.DataKeys[selRowIndex].Value as string; 
    if (string.IsNullOrWhiteSpace(userId)) return; 
    var checkBox = gridView.Rows[selRowIndex].FindControl("chkEnable") as CheckBox; 
    if (checkBox == null) return; 
    var query = "update CreateUser set Enable= @Enabled where UserID='" + userid + "'"; 
    cmd = new SqlCommand(query, con); 
    cmd.CommandType = CommandType.Text; 
    cmd.Parameters.AddWithValue("Enabled", checkBox.Checked); 
    cmd.ExecuteNonQuery(); 
    con.Close(); 

} 
+0

ваш код имеет ошибку mate проверить его – amitesh

+0

ваш код в порядке, но когда я устанавливаю флажок, я хочу сделать этот бит бит ложным, что не очень хорошо – amitesh

+0

как можно нажать событие checkbox работает, если я нажму на флажок, тогда мой запрос обновления обновления и изменения в базе данных – amitesh

0

Прежде всего, почему вы делаете это на мероприятии RowDataBound? RowDataBound возникает, когда строка ограничена gridview, но здесь мы должны обновлять строки gridview. Если вам нужно обновить свои строки, вы можете сделать это на команде RowUpdating.

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
     {  

      Checkbox chkbx = ((Checkbox)(row.Cells[8].Controls[0])); 
      bool IsChecked =chkbx.Checked ;   
      //You can write your update command here. 
     } 



protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
      GridViewRow row = GridView1.Rows[e.RowIndex]; 
     if (e.Row.RowType == DataControlRowType.DataRow) 
      { 

      TextBox MyName= (TextBox)e.Row.FindControl("FirstName"); 

      string name = Myname.text; 
      //For checkbox 
      Checkbox chkbx = (Checkbox)e.Row.FindControl("IsEnabled"); 

      if(chkbx.Checked ==true) 
      { 
       // do your stuff for checkbox checked. 
      } 
      else 
      { 
       // do your stuff if checkbox is not selected 
       } 
      } 
    } 
+0

Мне нужно проверить, какой идентификатор выбран с помощью привязки данных строки, чтобы я мог вносить изменения в базу данных – amitesh

+0

, как можно щелкнуть событие работы флажка, если я нажму на этот флажок, а затем обновить запросить огонь и внести изменения в базу данных – amitesh

+0

Посмотрите, что это плохая идея изменить значения базы данных для каждого нажатия кнопки «checkbox». Я предлагаю вам создать кнопку или что-то, что может обновить строки, которые вы «проверили» или «не отмечены». –

0

Наконец я получил ответ спасибо за ответ ребята

protected void Page_Load(object sender, EventArgs e) 
{ 
if (!Page.IsPostBack) 
{ 
    this.GetGridData(); 
} 
} 
protected void BindGrid() 
{ 
con.Open(); 
SqlCommand cmd = new SqlCommand("Select * from CreateUser", con); 
SqlDataAdapter da = new SqlDataAdapter(cmd); 
DataSet ds = new DataSet(); 
da.Fill(ds); 
con.Close(); 
if (ds.Tables[0].Rows.Count > 0) 
{ 
    GridView1.DataSource = ds; 
    GridView1.DataBind(); 
} 
else 
{ 
    ds.Tables[0].Rows.Add(ds.Tables[0].NewRow()); 
    GridView1.DataSource = ds; 
    GridView1.DataBind(); 
    int columncount = GridView1.Rows[0].Cells.Count; 
    GridView1.Rows[0].Cells.Clear(); 
    GridView1.Rows[0].Cells.Add(new TableCell()); 
    GridView1.Rows[0].Cells[0].ColumnSpan = columncount; 
    GridView1.Rows[0].Cells[0].Text = "No Records Found"; 
} 
} 
    private void GetGridData() 
    { 
    con.Open(); 
    string query = "Select * from CreateUser"; 
    da = new SqlDataAdapter(query, con); 
    DataSet ds = new DataSet(); 
    da.Fill(ds); 
    GridView1.DataSource = ds; 
    GridView1.DataBind(); 
    con.Close(); 
    } 
protected void btnSearchUser_Click(object sender, EventArgs e) 
{ 
    this.BindGrid(); 
} 
protected void lnkdelete_Click(object sender, EventArgs e) 
{ 
    LinkButton lnkbtn = sender as LinkButton; 
    //getting particular row linkbutton 
    GridViewRow gvrow = lnkbtn.NamingContainer as GridViewRow; 
    //getting userid of particular row 
    int UserID = Convert.ToInt32(GridView1.DataKeys[gvrow.RowIndex].Value.ToString()); 
    string FirstName = gvrow.Cells[0].Text; 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("delete from CreateUser where UserID=" + UserID, con); 
    int result = cmd.ExecuteNonQuery(); 
    con.Close(); 
    if (result == 1) 
    { 
     BindGrid(); 
     //Displaying alert message after successfully deletion of user 
     ScriptManager.RegisterStartupScript(this, this.GetType(), "alertmessage", "javascript:alert('" + FirstName + " details deleted successfully')", true); 
     this.GetGridData(); 
    } 
} 


protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
GridView1.PageIndex = e.NewPageIndex; 
GetGridData(); 
} 
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 
GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex]; 
Label userid= (Label)row.FindControl("lblUserID"); 
con.Open(); 
SqlCommand cmd = new SqlCommand("delete FROM CreateUser where UserID='" + Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value.ToString()) + "'", con); 
cmd.ExecuteNonQuery(); 
con.Close(); 
BindGrid(); 
} 
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    GridView1.EditIndex = e.NewEditIndex; 
    BindGrid(); 
} 
protected void GridView1_RowUpdating1(object sender, GridViewUpdateEventArgs e) 
{ 
string query = string.Empty; 
string userid = GridView1.DataKeys[e.RowIndex].Values["UserID"].ToString(); 
//Label id = GridView1.Rows[e.RowIndex].FindControl("lblUserID") as Label; 
TextBox FirstName = GridView1.Rows[e.RowIndex].FindControl("txtFirstName") as TextBox; 
TextBox LastName = GridView1.Rows[e.RowIndex].FindControl("txtLastName") as TextBox; 
TextBox DomainID = GridView1.Rows[e.RowIndex].FindControl("txtDomainID") as TextBox; 
TextBox EmailID = GridView1.Rows[e.RowIndex].FindControl("txtEmailID") as TextBox; 
TextBox Password = GridView1.Rows[e.RowIndex].FindControl("txtPassword") as TextBox; 
TextBox ConfirmPassword = GridView1.Rows[e.RowIndex].FindControl("txtConfirmPassword") as TextBox; 
TextBox RoleType = GridView1.Rows[e.RowIndex].FindControl("txtRoleType") as TextBox; 
CheckBox IsEnable = GridView1.Rows[e.RowIndex].FindControl("chkIsEnableEdit") as CheckBox; 
//TextBox textadd = (TextBox)row.FindControl("txtadd"); 
//TextBox textc = (TextBox)row.FindControl("txtc"); 
GridView1.EditIndex = -1; 
con.Open(); 
//SqlCommand cmd = new SqlCommand("SELECT * FROM detail", conn); 
SqlCommand cmd = new SqlCommand("update CreateUser set FirstName='" + FirstName.Text + "',LastName='" + LastName.Text + "',DomainID='" + DomainID.Text + "',EmailID='" + EmailID.Text + "',Password='" + Password.Text + "',ConfirmPassword='" + ConfirmPassword.Text + "',RoleType='" + RoleType.Text + "',Enable='" + IsEnable.Checked + "' where UserID='" + userid + "'", con); 
cmd.ExecuteNonQuery(); 
con.Close(); 
BindGrid(); 
//GridView1.DataBind(); 
} 
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 
{ 
GridView1.EditIndex = -1; 
BindGrid(); 
} 
} 
+0

ОК, так что вы делаете это в команде «GridView1_RowUpdating1», вот что я спрашивал, потому что вы спрашивали о событии «RowDataBound». –

+0

Еще одна вещь, использующая параметризованный запрос, ваш запрос склонен к 'SqlInjection'. Еще одна вещь: вы обновляете одну строку за раз, тогда вы можете сделать это с помощью события «RowCommand» намного проще. –

Смежные вопросы