Añadí un CheckBox al DataGridView para poder seleccionar varios items y así pasarlos a un Array para poder enviar mensajes de manera masiva.
Problema 1: presionar sobre el CheckBox no se tilda. Cabe mencionar que lo único que hice fue agregarlo desde las propiedades de edición del DataGridView.
Problema 2: para enviar mensajes de manera masiva se utiliza el siguiente bloque en string:
string bloque = ""; bloque = bloque + "ID1\t112223333\tMensaje\n";
Pero, yo necesito enviar esos mensajes de manera automática. Es decir que, a excepción del mensaje o texto, el ID y el TELÉFONO se deben cargar y/o asignar seleccionando uno o varios CheckBoxes del DataGridView. Para esto, cree la siguiente clase:
class Datos { public int id { get; set; } public string celular { get; set; } public string texto{ get; set; } public Datos() { } public Datos(int id, string cel, string texto) { this.id = id; this.celular = cel; this.texto= texto; } public string toString() { return "ID"+id+"\t" + celular + "\t" + texto + "\n"; } } }//el objetivo será utilizarla para cargar un array luego
Ahora, este es actualmente el código de la interfaz:
public partial class Form1 : Form{ public Form1(){ InitializeComponent(); dtgId.AllowUserToAddRows = false; } private void Form1_Load(object sender, EventArgs e){ llenarId(); dtgId.ReadOnly = true; } public void llenarId(){//método para poblar el DataGridView try{ string cadena = "cadena"; using (SqlConnection con = new SqlConnection(cadena)){ con.Open(); string query = "SELECT id FROM clientes GROUP BY id"; SqlCommand cmd = new SqlCommand(query, con); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); dtgId.DataSource = ds.Tables[0]; con.Close(); } } catch (SqlException ex){ MessageBox.Show("Error: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void button2_Click(object sender, EventArgs e){//Código para enviar SMS de manera masiva string usuario = "usuario"; string clave = "clave"; string respuesta = ""; int id = Convert.ToInt32(txtId.Text); string telefono = txtNumero.Text; string texto = txtTexto.Text; List<Datos> item = new List<Datos>(); Datos datos = new Datos(id, telefono, texto); item.Add(datos); string bloque = ""; //bloque = bloque + "ID1\t1144444444\tMi texto 1\n"; for (int i = 0; i > item.Count; i++){ bloque += item[i].toString(); } Uri uri = new Uri("uri"); HttpWebRequest requestFile = (HttpWebRequest)WebRequest.Create(uri); requestFile.Method = "POST"; requestFile.ContentType = "application/x-www-form-urlencoded"; StringBuilder postData = new StringBuilder(); postData.Append("api=" + System.Web.HttpUtility.UrlEncode("1") + "&"); postData.Append("usuario=" + System.Web.HttpUtility.UrlEncode(usuario) + "&"); postData.Append("clave=" + System.Web.HttpUtility.UrlEncode(clave) + "&"); postData.Append("separadorcampos=" + System.Web.HttpUtility.UrlEncode("tab") + "&"); postData.Append("bloque=" + System.Web.HttpUtility.UrlEncode(bloque) + "&"); byte[] byteArray = Encoding.GetEncoding("iso-8859-1").GetBytes(postData.ToString()); requestFile.ContentLength = byteArray.Length; Stream requestStream = requestFile.GetRequestStream(); requestStream.Write(byteArray, 0, byteArray.Length); requestStream.Close(); HttpWebResponse webResp = requestFile.GetResponse() as HttpWebResponse; if (requestFile.HaveResponse){ if (webResp.StatusCode == HttpStatusCode.OK || webResp.StatusCode == HttpStatusCode.Accepted){ StreamReader respReader = new StreamReader(webResp.GetResponseStream(), Encoding.GetEncoding("iso-8859-1")); respuesta = respReader.ReadToEnd(); MessageBox.Show(respuesta); } } } private void dtgId_CellContentClick(object sender, DataGridViewCellEventArgs e){ //con este método al presionar sobre un checkbox se muestra el id y el teléfono en un TextBox var row = dtgId.Rows[e.RowIndex]; var id = Convert.ToInt32(row.Cells["id"].Value.ToString()); try{ string conn = "cadena"; using (SqlConnection con = new SqlConnection(conn)){ con.Open(); string sql = "SELECT id,celular FROM clientes WHERE id=@id"; SqlCommand cmd = new SqlCommand(sql, con); cmd.Parameters.AddWithValue("@id", id); SqlDataReader reader = cmd.ExecuteReader(); if (reader.Read()){ txtId.Text = reader["id"].ToString(); txtNumero.Text = reader["celular"].ToString(); } } }catch (SqlException exc){ MessageBox.Show("Error: " + exc.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }
Para resumir la idea: No envía los mensajes, es decir no me han llegado. ¿Alguna idea de cómo puedo solucionarlo?