Membuat DataTable dari nilai textbox / dropdownlist

Aug 25 2020

Saya mencoba membuat datatable dengan dua kolom, "unit_serial" & "testresult". Saya memiliki panel dengan tabel yang berisi kolom kotak teks dengan "unit_serial" dan dropdownlist dengan opsi untuk Lulus atau Gagal yang merupakan "testresult". Saya sering bingung saat membuat loop tentang apa yang harus masuk ke dalam dan di luar loop jadi saya yakin itu masalah saya, tetapi saya telah mencoba setiap variasi yang dapat saya pikirkan dan saya tidak bisa mendapatkan data yang saya cari. Inilah yang saya tulis. Data sampel yang saya kerjakan harus memiliki setidaknya 3 baris tetapi saya hanya mendapatkan 1.

Saya juga memiliki masalah terpisah dengan panel yang sama yang akan saya sertakan dalam pertanyaan ini karena saya yakin itu adalah sesuatu yang relatif sederhana. Daftar tarik-turun di panel dinonaktifkan kecuali bidang kotak teks di baris tabel yang sama diisi. Ketika saya membuat pilihan dropdownlist pertama (yang menyebabkan postback) semua dropdown list menjadi aktif. Bagaimana cara mempertahankan status nonaktif dari dropdown setelah postback?

DataTable dt = new DataTable();
            dt.Columns.Add("hbserial");
            dt.Columns.Add("test_result");
            DataRow dr = dt.NewRow();
            var myTextBoxes = TestResults.Controls
                .OfType<TextBox>()
                .Where(tb => !string.IsNullOrWhiteSpace(tb.Text));

            var myDropDownLists = TestResults.Controls
                .OfType<DropDownList>()
                .Where(ddl => ddl.SelectedValue != "--Select--");

            foreach (TextBox tb in myTextBoxes)
            {
                string hbserial = tb.Text;
                dr["hbserial"] = hbserial;
                foreach (DropDownList ddl in myDropDownLists)
                {
                    string testresult = ddl.SelectedValue;
                    dr["test_result"] = testresult;
                }

                dt.Rows.Add(dr);
            }

Ini kode halaman aspx saya:

<asp:Panel ID="TestResults" runat="server" Width="1040px" BorderStyle="Double" BorderWidth="2px" Height="280px">
            <br />
             <table id="HBredotable" style="width: 625px">
                <tr>
                    <td style="width: 189px" align="center">
                        <asp:Label ID="Label2" runat="server" Text="Serial One:"></asp:Label>
                    </td>
                    <td style="width: 248px">
                        <asp:TextBox ID="TextBox1" runat="server" Width="230px" Height="22px" ReadOnly="true"></asp:TextBox>
                    </td>
                    <td>
                        <asp:DropDownList ID="DropDownList1" runat="server" Height="22px" Width="165px" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true" EnableViewState="true">
                            <asp:ListItem Text="--Select--" Value="2"></asp:ListItem>
                            <asp:ListItem Text="Pass" Value="1"></asp:ListItem>
                            <asp:ListItem Text="Fail" Value="0"></asp:ListItem>
                        </asp:DropDownList>
                    </td>
                    <tr>
                        <td style="width: 189px" align="center">
                            <asp:Label ID="Label3" runat="server" Text="Serial Two:"></asp:Label>
                        </td>
                        <td style="width: 248px">
                            <asp:TextBox ID="TextBox2" runat="server" Width="230px" Height="22px" ReadOnly="true"></asp:TextBox>
                        </td>
                        <td>
                            <asp:DropDownList ID="DropDownList2" runat="server" Height="22px" Width="165px" OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged" AutoPostBack="true" EnableViewState="true">
                                <asp:ListItem Text="--Select--"></asp:ListItem>
                                <asp:ListItem Text="Pass" Value="1"></asp:ListItem>
                                <asp:ListItem Text="Fail" Value="0"></asp:ListItem>
                            </asp:DropDownList>
                        </td>
                    </tr>
                <tr>
                    <td style="width: 189px" align="center">
                        <asp:Label ID="Label4" runat="server" Text="Serial Three:"></asp:Label>
                    </td>
                    <td style="width: 248px">
                        <asp:TextBox ID="TextBox3" runat="server" Width="230px" Height="22px" ReadOnly="true"></asp:TextBox>
                    </td>
                    <td>
                        <asp:DropDownList ID="DropDownList3" runat="server" Height="22px" Width="165px" OnSelectedIndexChanged="DropDownList3_SelectedIndexChanged" AutoPostBack="true" EnableViewState="true">
                            <asp:ListItem Text="--Select--"></asp:ListItem>
                            <asp:ListItem Text="Pass" Value="1"></asp:ListItem>
                            <asp:ListItem Text="Fail" Value="0"></asp:ListItem>
                        </asp:DropDownList>
                    </td>

                </tr>
                <tr>
                    <td style="width: 189px" align="center">
                        <asp:Label ID="Label5" runat="server" Text="Serial Four:"></asp:Label>
                    </td>
                    <td style="width: 248px">
                        <asp:TextBox ID="TextBox4" runat="server" Width="230px" Height="22px" ReadOnly="true"></asp:TextBox>
                    </td>
                    <td>
                        <asp:DropDownList ID="DropDownList4" runat="server" Height="22px" Width="165px" OnSelectedIndexChanged="DropDownList4_SelectedIndexChanged" AutoPostBack="true" EnableViewState="true">
                            <asp:ListItem Text="--Select--"></asp:ListItem>
                            <asp:ListItem Text="Pass" Value="1"></asp:ListItem>
                            <asp:ListItem Text="Fail" Value="0"></asp:ListItem>
                        </asp:DropDownList>
                    </td>
                </tr>
                <tr>
                    <td style="width: 189px" align="center">
                        <asp:Label ID="Label6" runat="server" Text="Serial Five:"></asp:Label>
                    </td>
                    <td style="width: 248px">
                        <asp:TextBox ID="TextBox5" runat="server" Width="230px" Height="22px" ReadOnly="true"></asp:TextBox>
                    </td>
                    <td>
                        <asp:DropDownList ID="DropDownList5" runat="server" Height="22px" Width="165px" OnSelectedIndexChanged="DropDownList5_SelectedIndexChanged" AutoPostBack="true" EnableViewState="true">
                            <asp:ListItem Text="--Select--"></asp:ListItem>
                            <asp:ListItem Text="Pass" Value="1"></asp:ListItem>
                            <asp:ListItem Text="Fail" Value="0"></asp:ListItem>
                        </asp:DropDownList>
                    </td>
                </tr>
                <tr>
                    <td style="width: 189px" align="center">
                        <asp:Label ID="Label7" runat="server" Text="Serial Six:"></asp:Label>
                    </td>
                    <td style="width: 248px">
                        <asp:TextBox ID="TextBox6" runat="server" Width="230px" Height="22px" ReadOnly="true"></asp:TextBox>
                    </td>
                    <td>
                        <asp:DropDownList ID="DropDownList6" runat="server" Height="22px" Width="165px" OnSelectedIndexChanged="DropDownList6_SelectedIndexChanged" AutoPostBack="true" EnableViewState="true">
                            <asp:ListItem Text="--Select--"></asp:ListItem>
                            <asp:ListItem Text="Pass" Value="1"></asp:ListItem>
                            <asp:ListItem Text="Fail" Value="0"></asp:ListItem>
                        </asp:DropDownList>
                    </td>
                </tr>
            </table>
            <br />
            <asp:Label ID="lblREDOerror" runat="server" Text="" ForeColor="red"></asp:Label><br />
            <asp:Button ID="btnAllPass" runat="server" Text="All Tests Pass / Unit Complete"  Width="210px" OnClick="btnAllPass_Click"/>
            <asp:Button ID="btnAddredo" runat="server" Text="Enter Hashboards for REDO" Width="210px" OnClick="btnAddredo_Click" />
            <asp:Button ID="btnconfirmredo" runat="server" Text="Yes, Continue" Width="210px" OnClick="btnconfirmredo_Click" />
            <asp:Button ID="btnreturn" runat="server" Text="No, Go Back" Width="210px" OnClick="btnreturn_Click"  />
            <br />
        </asp:Panel>

Jawaban

SalikRafiq Aug 25 2020 at 16:05

Masalah Anda mungkin ada di sini dalam loop bersarang ini:

foreach (TextBox tb in myTextBoxes)
            {
                string hbserial = tb.Text;
                dr["hbserial"] = hbserial;
                foreach (DropDownList ddl in myDropDownLists)
                {
                    string testresult = ddl.SelectedValue;
                    dr["test_result"] = testresult;
                }

                dt.Rows.Add(dr);
            }

Anda memutar ulang semua tetesan dari kotak teks Anda atau setiap.

Yang benar-benar ingin Anda lakukan adalah mengambil kontrol tetesan yang cocok dengan kotak teks. Sepertinya angka di setiap pertandingan jadi Anda dapat menggunakannya dan FindControluntuk menemukan lokasi tetesan.

Sesuatu seperti ini:

foreach (TextBox tb in myTextBoxes)
            {
                string hbserial = tb.Text;
                dr["hbserial"] = hbserial;
                var num = tb.ControlID.Substring("TextBox".Length-1);
                var droplistForTextBox = TestResults.FindControl<DropDownList>("DropDownList"+num);
                string testresult = ddl.SelectedValue;
                dr["test_result"] = testresult;
                dt.Rows.Add(dr);
            }  

NB: Saya belum mencoba kode di atas.

Saya merasa menarik bahwa Anda menggunakan Datatable untuk penyimpanan lokal daripada a List<>atau Array<>. Saya sarankan Anda melihatnya sebagai, IMHO, cara yang lebih baik untuk menyimpan informasi ini.