Как создать вид сетки с настраиваемым столбцом из другой таблицы с asp.net и c #? - PullRequest
3 голосов
/ 14 марта 2012

теперь я очень запутался в том, как создать gridview со следующей структурой и критериями:

примечание: gridview будет принимать данные из разных таблиц

столбцы: 1. IDcol уникальное значениеи это будет из таблицы A (как текст) 2. Дата будет также из таблицы A (как текст) 3. link1 это будет гиперссылка на другую страницу, а параметром для URL будет значение столбца 'IDcol', но отображаемый текст будетизменено, если эта запись существует в таблице B с тем же «IDcol», отображаемым будет «просмотр / редактирование», если не существует, это будет «Добавить новую»

структура базы данных:

tableA:

IDcol as (primary key),
Date

tableB:

ID,
IDcol as (foreign key from tableA).
other fields

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

извинитеесли мой способ описания не ясен, но я действительно запутался


Мой код для удаления части:

        <asp:LinkButton ID="DeleteLink" runat="server" Text="Delete"     CommandName="Delete"></asp:LinkButton>
        </ItemTemplate>
        <ItemStyle Width="100px" />
        </asp:TemplateField>


 DeleteCommand="DELETE VisitsInfo WHERE ID=@VID">


 <DeleteParameters>
                <asp:Parameter Name="VID" Type="Int64" />
            </DeleteParameters>

в коде позади:

 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {

            int VID = int.Parse(GridView1.DataKeys[0].Value.ToString());
            SqlDataSourceVisits.DeleteParameters[0].DefaultValue = VID.ToString();

    }

когда я нажимаю на ссылку удаления, чтобы удалить строкуно когда вы обновляете страницу, она удаляет другую строку, не щелкая ссылку удаления, так почему это произошло ??

Ответы [ 3 ]

2 голосов
/ 17 марта 2012

Независимо от того, сколько таблиц вы используете для отображения данных в Gridview, лучшим и более гибким подходом является использование OnRowDataBound.

//do some database queries to return the appropriate value
DataTable dt = new DataTable();
private void Bind()
{
    //set up the dt with all the required data from single or multiple tables
}

//Then in the page Load method, call the above Bind method
protected void Page_Load(object sender, EventArgs e)
{
     if (!IsPostBack)
     {
          Bind();
     }
}

//then do something like the following 
int idx = 0;    
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    //do some database queries to return the appropriate value, then do something like the following
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Cells[0].Text = dt.Rows[idx][0];
        e.Row.Cells[1].Text = dt.Rows[idx][1];
        //or maybe
        ((TextBox)e.Row.Cells[0].FindControl("textBox1")).Text = dt.Rows[idx][0];
        ((Label)e.Row.Cells[1].FindControl("label2")).Text = dt.Rows[idx][1];
        ((CheckBox)e.Row.Cells[1].FindControl("chkbx1")).Selected = (bool)dt.Rows[idx][2]; 

        idx++;
    }
}

И, как сказал Пранай, вы можете использовать Linq иприсоединитесь, чтобы получить необходимые данные из всех таблиц, однако вы все равно можете получить их любым другим удобным для вас способом с

0 голосов
/ 14 марта 2012

Если я правильно понял, вы хотите выбрать какой-нибудь столбец (например, A, B, C) из нескольких таблиц и затем отобразить их в виде сетки.Если это так, это можно сделать различными способами.1. Создайте пользовательский DataSet с необходимыми столбцами данных в нем и заполните его, используя запрос выбора.Затем свяжите набор данных в gridview.2. Создайте DataTable с необходимыми столбцами данных в нем и заполните его, используя запрос выбора.Затем свяжите таблицу в gridview.3. Добавьте нужные столбцы непосредственно в gridview, затем добавьте в него элементы данных, используя цикл. Примечание: В любом случае, UNCHECK опция " AutoGenerateColumn " в виде сетки для плавной работы.

0 голосов
/ 14 марта 2012

Создайте вид данных из двух таблиц и привяжите к нему сетку.При рендеринге GridView, в событиях строки т.е.строка, вы можете поставить свои условия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...