Доброго времени суток, товарищи. Как возможно реализовать ссылку в хедере таблицы, подобно тому, как это реализовано на скриншоте(DELETE ALL)? Есть такой код. Первое событие должно удалять только строки, по нажатии на ссылку DELETE(как на рисунке вверху), а второе событие, должно удалять полностью всё содержимое таблицы по нажатии на DELETE ALL. Но, работает это все не корректно. Поясню как именно не корректно - если нажимаю DELETE - удаляется всё содержимое, хотя должна удалятся только строка, в которой я нажал DELETE. Code: private void DataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) { int index = dataGridView1.CurrentRow.Index; if (index != -1) dataGridView1.Rows.RemoveAt(index); } private void DataGridView_CellClick(object sender, DataGridViewCellEventArgs e) { dataGridView1.Rows.Clear(); } Помогите пожалуйста с таблицей(первая часть поста) и с не корректно работающим кодом.. Заранее спасибо.
Code: private void dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex != -1) dataGridView1.Rows.RemoveAt(e.RowIndex); } private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { dataGridView1.Rows.Clear(); }
Огномное спасибо, работает. А, как возможно реализовать ссылку в хедере(как на рисунке header - Delete All)?
Установить тип последнего Column в DataGridViewLinkColumn , если уж с EventArgs то можно и так ((DataGridView)sender).Rows.RemoveAt(e.RowIndex) UPD. У последнего Column придется менять Cell.Style, e.g. - LastColumnName.HeaderCell.Style.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(204))); LastColumnName.HeaderCell.Style.ForeColor = System.Drawing.Color.Blue;
Извините за назойливость, но появился еще один вопрос.. у меня все получилось. НО появилась маленькая проблемка. Вот рабочая прога. Проблемка в том, что при нажатии по ссылке, к примеру "football ua" - удаляется вся строка, хотя это должно происходить, только по нажатию Delete. Как исправить и сделать, чтобы открывалось в WebBrowser?
Нужно смотреть на индекс ячейки, то есть он должен быть 2 для удаления и 0 для перехода PHP: private void dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex !=-1) { if(e.ColumnIndex==2) dataGridView1.Rows.RemoveAt(e.RowIndex); else if(e.ColumnIndex==0) { webBrowser_Object.Navigate(((DataGridView)sender).Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString()); } } } Хотя для перехода лучше создать .CellContentDoubleClick event.
Уважаемый PaCo, можно у Вас еще проконсультироваться(и у остальных тоже)? Есть код: Code: private void DataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex != -1) { if (e.ColumnIndex == 2) dataGridView1.Rows.RemoveAt(e.RowIndex); else if (e.ColumnIndex == 0) { webBrowser1.Navigate(((DataGridView)sender).Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString()); } } } А как правильно распарсить элемент WebBrowser, чтобы в нем выводилось только - <Title>День независимости на Kiss и т.д., <link> и <pubDate>.
Code: private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) { HtmlDocument html = this.webBrowser1.Document; HtmlElementCollection col = html.GetElementsByTagName("Title"); foreach(HtmlElement element in col) Console.WriteLine(element.InnerText); } вместо "Title" можно подставлять любые теги.
Сдедал событием, не работает Так же и выдает, как выдавало до этого. Пробовал даже вместо Console.WriteLine(element.InnerText); ставить MessageBox.Text(element.InnerText); - выпадает просто пустое сообщение
Я хотел сказать, что сначало сглупил, не поставил событие.. в результате ничего не происходило, а когда добавил - просто выскакивало message и всё. url легко - http://football.ua/rss2.ashx
Зачем тут вообще WebBrouser? В C# есть более-менее нормальная поддержка парсинга xml, вот пример (пускай и не самый лучший) с готовым проектом.
нет, зачем же? можно всё делать находу: Code: XmlTextReader reader = new XmlTextReader("http://football.ua/rss2.ashx"); while (reader.Read()) { switch (reader.Name) { case "title": Console.WriteLine(reader.ReadString()); break; case "link": Console.WriteLine(reader.ReadString()); break; } }
C этим разобрался, спасибо. Возможно последний вопрос.. Как реализовать парсинг xml не по заданной ссылке(http://football.ua/rss2.ashx), а по нажатии на ссылку в таблице(рисунок выше)? Пробовал разными способами, не один не получился.
интересно, какие ты способы испробовал вот: Code: private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { XmlTextReader reader = new XmlTextReader(dataGridView1[e.ColumnIndex,e.RowIndex].Value.ToString()); while (reader.Read()) { switch (reader.Name) { case "title": Console.WriteLine(reader.ReadString()); break; case "link": Console.WriteLine(reader.ReadString()); break; } } } или ещё лучше: Code: private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { XmlTextReader reader = new XmlTextReader((sender as DataGridView)[e.ColumnIndex,e.RowIndex].Value.ToString()); while (reader.Read()) { switch (reader.Name) { case "title": Console.WriteLine(reader.ReadString()); break; case "link": Console.WriteLine(reader.ReadString()); break; } } }
Спасибо. Пробовал практически так же, только забыл про добавление [e.ColumnIndex,e.RowIndex] Осталось дело за малым, реализовать это все с помощь БД. Еще раз, спасибо!!!
Вот итоговая программа. Пытаюсь сохранить DataGrid в БД(MS SQL Sever) и не могу понять как... Есть пример, но Code: private void button1_Click(object sender, EventArgs e) { { string connStr = @"DefaultDir=C:\temp;Driver={Microsoft Text Driver (*.txt; *.csv)}"; OdbcConnection conn = new OdbcConnection(connStr); // try { conn.Open(); //DataTable dt = new DataTable(); OdbcCommand cmd = new OdbcCommand("select * from ", conn); OdbcDataReader reader = cmd.ExecuteReader(); while (reader.Read()) textBox1.Text += reader["*"].ToString() + "\r\n"; } // catch (OdbcException) { MessageBox.Show("Файл не найден"); } // finally { conn.Close(); } } } Это я делал по извлечению из файла, а как можно используя этот код(если он подходит) реализовать по извлечению из таблицы DataGrid(чтобы все изменения происходящие в DataGrid происходили и в БД)? P.S. Еще я думал может через сам проект создать базу? Как будет проще?