Готовое решение здесь, конечно, предложить сложно, но могу посоветовать несколько направлений.
Во-первых, нужно убрать чисто служебный код:
button1.Anchor = (AnchorStyles.Right | AnchorStyles.Top);
textBox1.Anchor = (AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Left);
label1.Anchor = (AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Left);
textBox2.Anchor = (AnchorStyles.Right | AnchorStyles.Top);
label2.Anchor = (AnchorStyles.Right | AnchorStyles.Top);
dataGridView1.Anchor = (AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Top | AnchorStyles.Left);
label3.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left);
listBox1.Anchor = (AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Left);
/*---header---*/
Column3.HeaderCell.Style.BackColor = System.Drawing.Color.Blue;
Column3.HeaderCell.Style.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Underline);
Все эти действия (настройка внешнего вида и расположения компонентов) можно выполнить непосредственно в дизайнере формы. Тогда весь этот код переместиться в автогенерирующийся файл и не будет смешиваться с логикой формы (реакция на события и т.п.).
Во-вторых, основное зло приведённого кода (как и многих других WinForms-приложений) — наличие логики обращения к базе в коде формы. При нормальном подходе к архитектуре, эта логика должна инкапсулироваться в специальном классе. Если интересно, как архитектурно правильно реализовать настольное приложение, прочитайте классический труд Мартина Фаулера в пяти томах:
- Martin Fowler — GUI Architectures (перевод). Часть 1
- Martin Fowler — GUI Architectures (перевод). Часть 2
- Martin Fowler — GUI Architectures (перевод). Часть 3
- Martin Fowler — GUI Architectures (перевод). Часть 4
- Martin Fowler — GUI Architectures (перевод). Часть 5
В качестве быстрого решения, можно вынести логику работы с базой в специальный слой. Для этого нужно:
1) Создать класс предметной области:
public class Feed
{
public string Id { get; set; }
public string Name { get; set; }
public string Url { get; set; }
}
2) Создать интерфейс для слоя доступа к данным:
public interface IFeedRepository
{
IEnumerable<Feed> GetAllFeeds();
}
3) Создать реализацию интерфейса доступа к данным:
public class AdoNetFeedRepository : IFeedRepository
{
// ...
public IEnumerable<Feed> GetAllFeeds()
{
var result = new List<Feed>();
SqlConnection cn = new SqlConnection(strConn);
SqlCommand cmd = new SqlCommand("Select FeedID, Feed, Nameoffeed FROM edik_1", cn);
try
{
cn.Open();
SqlDataReader rdr = default(SqlDataReader);
rdr = cmd.ExecuteReader();
while (rdr.Read())
{
result.Add(new Feed
{
Id = rdr["FeedID"],
Name = rdr["Nameoffeed"],
Url = rdr["Feed"]
});
}
rdr.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
if ((cn != null))
{
cn.Close();
}
}
return result;
}
}
4) На форме использовать созданный слой доступа к данным:
// ...
var allFeeds = feedRepository.GetAllFeeds();
foreach(var feed in allFeeds)
{
dataGridView1.Rows.Add(feed.Id, feed.Url, feed.Name);
}